人类的最大的敌人是遗忘。---小懒人语
这个问题还算容易发现,因为这是一个典型。
例如:
一、
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;