看看下面的一段代码

djh512 2011-04-13 06:03:41

int ** arr;
arr = new int* [row];
for (int i = 0; i < row; ++i)
arr[i] = new int[col];

delete[] arr;

这样释放对么?
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 djh512 的回复:]
C/C++ code

int ** arr;
arr = new int* [row];
for (int i = 0; i < row; ++i)
arr[i] = new int[col];
delete[] arr;
这样释放对么?
[/Quote]

进行delete [] arr[i]这样的释放是由于楼主使用的方法造成的,这种方法不太好,其实也可以使用只释放一次的做法:


int* data = new int[ row * col ]; //数据区域,row * col个int
int** arr = new int*[ row ]; //中间地址区域 row个int*
for( int i = 0; i < row; ++i )
arr[ i ] = data + col * i;
........
delete [] arr; //现在只需要释放一次arr就OK了
delete [] data; //释放数据,如果数据还有用处,当然也可以不释放,继续使用
delphiwcdj 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

不对
for (int i = 0; i < row; ++i)
delete[]arr[i];
delete[]arr;
[/Quote]
UP 你申请了几个就要释放几个
evencoming 2011-04-13
  • 打赏
  • 举报
回复
记住:
怎么new
就怎么delete
無_1024 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
不对
for (int i = 0; i < row; ++i)
delete[]arr[i];
delete[]arr;
[/Quote]
释放的时候也要逐个释放
恨天低 2011-04-13
  • 打赏
  • 举报
回复
楼上正解!
pengzhixi 2011-04-13
  • 打赏
  • 举报
回复
不对
for (int i = 0; i < row; ++i)
delete[]arr[i];
delete[]arr;

64,691

社区成员

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

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