有见到类似这样释放内存的代码么?

booxiong 2011-06-07 11:23:57
class Obj
{
};

int n = 100;
Obj* a = new Obj[n];

for(int i = 0;i < n;i++)
{
delete Obj[i];
}
...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
booxiong 2011-06-12
  • 打赏
  • 举报
回复
老实说,这种写法,在XP里面还真没崩,但是在WIN7里面就崩掉了,呵呵![Quote=引用 7 楼 luciferisnotsatan 的回复:]

lz这个写法,运行时不会崩了?
[/Quote]
luciferisnotsatan 2011-06-08
  • 打赏
  • 举报
回复
lz这个写法,运行时不会崩了?
就想叫yoko 2011-06-08
  • 打赏
  • 举报
回复
觉得楼主应该是笔误了想写
delete a[j];

我觉得应该可以吧
关注下~
  • 打赏
  • 举报
回复

nt n = 100;
Obj* a = new Obj[n];

for(int i = 0;i < n;i++)
{
delete Obj[i];
}
楼主,这种写法有问题,首先,你new出来的是一个对象数组,在一般情况下,new操作所分配的内存都会大于用户需要的,也就是说会额外分配一块内存,这块内存用来标记用户需要的内存的大小,有没分配等相关信息

在delete的时候,会根据这块额外的信息去删除,并修改相关选项

你上面的内容,每次delete obj[i],但是编译器总共就一块额外内存,用来存储相关信息,你这样做,就是相当于有n块相关内存,每次delete的时候,都会根据那一小块来释放内存,并修改相关信息,所以这样会出错...
shaotine_wu 2011-06-08
  • 打赏
  • 举报
回复
这种写法没见过,如果是obj是类的对象
可以
for(int i = 0;i < n;i++)
{
Obj[i]->~Obj(); //调用析构函数
}
Louistao 2011-06-07
  • 打赏
  • 举报
回复
delete obj;
delete[] obj;
没见过LZ那样的
sduxiaoxiang 2011-06-07
  • 打赏
  • 举报
回复
meijianguo

delete []Obj

64,651

社区成员

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

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