我正在研究使用动态分配创建带指针的对象。我读到,当一个对象被创建一次并被删除两次时,堆内存就会被破坏。什么是腐败的意思?它是否类似于内存泄漏还是其他的东西?
int main()
{
//consider my class name is sample
sample *p= new sample;
//some code
delete p;
//some code
delete p;
}
当我第一次删除p时,p指向的内存被清除并安全返回堆。下次会发生什么?
答案 0 :(得分:1)
免费商店是一个精心管理的免费和分配区块系统,新的和删除做簿记,以保持一致状态。如果再次删除,系统可能会对无效数据执行相同的簿记,并且突然免费存储处于不一致状态。这被称为“堆腐败”。
一旦发生这种情况,您使用new或delete执行的任何操作都可能包含不可预测的结果,其中可能包括尝试在应用程序的内存区域外写入,破坏数据,错误地认为没有更多内存或重叠分配
最安全的赌注总是在删除后将指针设置为null。
int *ptr = new int;
// do something
delete ptr;
ptr = null;