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

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

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

例如:

一、

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;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值