删除指针对象会破坏堆内存

时间:2014-11-01 11:31:35

标签: c++ object heap-corruption

我正在研究使用动态分配创建带指针的对象。我读到,当一个对象被创建一次并被删除两次时,堆内存就会被破坏。什么是腐败的意思?它是否类似于内存泄漏还是其他的东西?

int main()
{
    //consider my class name is sample
    sample *p= new sample;
    //some code 
    delete p;
    //some code
    delete p;
}

当我第一次删除p时,p指向的内存被清除并安全返回堆。下次会发生什么?

1 个答案:

答案 0 :(得分:1)

免费商店是一个精心管理的免费和分配区块系统,新的和删除做簿记,以保持一致状态。如果再次删除,系统可能会对无效数据执行相同的簿记,并且突然免费存储处于不一致状态。这被称为“堆腐败”。

一旦发生这种情况,您使用new或delete执行的任何操作都可能包含不可预测的结果,其中可能包括尝试在应用程序的内存区域外写入,破坏数据,错误地认为没有更多内存或重叠分配

最安全的赌注总是在删除后将指针设置为null。

int *ptr = new int;
// do something
delete ptr;
ptr = null;