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

来源:互联网 发布:战翼cg网络班 编辑:程序博客网 时间:2024/04/29 21:00

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

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

例如:

一、

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;



原创粉丝点击