现在的位置: 首页 > 综合 > 正文

C++对象数组释放时的非故意内存泄露

2013年03月13日 ⁄ 综合 ⁄ 共 506字 ⁄ 字号 评论关闭

人类的最大的敌人是遗忘。---小懒人语

这个问题还算容易发现,因为这是一个典型。

例如:

一、

Object是一个类,

Object *object = new Object[3];

...balabala...

delete object;//problem

这时就已经引发内存泄露了,因为此时释放掉的只是object[0]的内存(编译器以&object[0]的地址为参数调用一次析构函数),

等同于delete[1] object;

而正确的释放应该是delete[] object;

或者是delete[3] object;


二、有点复杂

Object是一个类,

Object **object = new Object *[3];//只是动态的分配了3个Object对象的指针数组,但它们本身并不是对象

//分配

for(int i = 0;i<3;++i)

{

object[i] = new Object();

}

...balabala...

delete[] object;//problem

其实这样也造成了内存泄露了。此时delete只是指针而非其指向的对象。

要这样做才可以:

for(int i = 0;i<3;++i)

{

delete object[i] ;

}

delete object;

抱歉!评论已关闭.