double(* xxtxxzhi)[2]=(double(*)[2])new double[2];//如何删除

bluevox3000 2010-12-18 05:04:01
1、这样的二维动态数组是否正确,不正确的话,正确的应该是?
(使用这种定义已经完成数组的定义和使用,但delete不正确)
2、如何才能删除上述的数组定义?
谢谢。
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leigh_ 2010-12-18
  • 打赏
  • 举报
回复
针对for循环中用new来创建的每个数组,都必须为其调用delete[]。这样一来,自由存储管理器就能回收他们占用的内存。最后,还要在调用一次delete[],对数组m本身进行回收。
自己好好理解一下。
leigh_ 2010-12-18
  • 打赏
  • 举报
回复
一个二维动态数组的定义

#include <iostream>
using namespace std;

typedef int* IntArrayPtr;

int main()
{
int d1,d2;

cin >> d1 >> d2;

IntArrayPtr *m = new I[d1];

int i, j;
for (i = 0; i < d1; i++)
for (j = 0; j < d2; j++)
cin >> m[i][j];

for (i = 0; i < d1; i++)
{
for (j = 0; j < d2; j++)
cout << m[i][j] << " ";
cout << endl;
}

[b]for (i = 0; i < d1; i++)
delete[] m[i];
delete[] m;
[/b]
return 0;
}
shanno 2010-12-18
  • 打赏
  • 举报
回复
#include <iostream>

int main()
{
// double (*p)[2] = (double(*)[2]) new double[2]; // p是一个指向数组的指针,该数组包含两个double类型的元素
// // new double[2] 申请一块大小为2 * sizeof(double)的内存
// // (double(*)[2]) 强制类型转换为double(*)[2]类型的指针
//
// (*p)[0] = 10;
// (*p)[1] = 100;
//
// std::cout << "打印数组中的元素...\n"
// << "第一个元素:" << (*p)[0]
// <<std::endl
// <<"第二个元素:" << (*p)[1]
// << std::endl;
//
// // 释放内存
// delete p;
int const m = 5;
int const n = 10;
double (*p)[m][n] = (double(*)[m][n]) new double[m][n];

double cnt = 0.0;
int i,j;
for (j=0; j < m; ++j)
{
for (i = 0; i < n; ++i)
{
(*p)[j][i] = cnt;
cnt += 0.1;
}
}

// 打印二维数组
for (j=0; j < m; ++j)
{
for (i = 0; i < n; ++i)
{
std::cout << (*p)[j][i] << " ";
}
std::cout << std::endl;
}

delete p;
return 0;
}


希望有所帮助.
shanno 2010-12-18
  • 打赏
  • 举报
回复
#include <iostream>

int main()
{
double (*p)[2] = (double(*)[2]) new double[2]; // p是一个指向数组的指针,该数组包含两个double类型的元素
// new double[2] 申请一块大小为2 * sizeof(double)的内存
// (double(*)[2]) 强制类型转换为double(*)[2]类型的指针

(*p)[0] = 10;
(*p)[1] = 100;

std::cout << "打印数组中的元素...\n"
<< "第一个元素:" << (*p)[0]
<<std::endl
<<"第二个元素:" << (*p)[1]
<< std::endl;

// 释放内存
delete p;
return 0;
}
bluevox3000 2010-12-18
  • 打赏
  • 举报
回复
标题中的内容无错,但不知为何删除不了。
double(* xxtxxzhi)[2]=(double(*)[2])new double[2];//2行,2列定义比较特殊

for (int i=0;i<2;i++)//初始化xxtxxzhi
{
for (int j=0;j<2;j++)
{
xxtxxzhi[i][j]=0;
}
}

---------------------------------
for (int i=0;i<2;i++)
{
//参考定义:double(* xxtxxzhi)[2]=(double(*)[2])new double[2];//2行,2列定义比较特殊
//delete[] xxtxxzhi[i];//此行写法产生警告:转换到提供的指针
delete[] (double *)xxtxxzhi[i];//此行无误
}
delete[] xxtxxzhi;

如上。虽然重新改变定义,完成了功能,但还是想知道这里应该如何解决?
bdmh 2010-12-18
  • 打赏
  • 举报
回复

double(* xxtxxzhi)[2]=new double[5][2];
xxtxxzhi[0][0] = 100;
delete[] xxtxxzhi;

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧