可以清理损坏的堆吗?

时间:2019-03-03 19:56:05

标签: c++ memory-management memory-leaks free delete-operator

如果我破坏了堆,之后可以清理吗?如果是,怎么办?

堆损坏示例:

int *x = new int; // If we allocate memory wit new, we have to free it later.. 
x++;
*x = 1; // the heap is now corrupted

但是,调用free(x)delete x等将导致上面的代码崩溃。内存是否仍可以以某种方式释放,还是已经破灭了?

1 个答案:

答案 0 :(得分:2)

  

如果我破坏了堆,之后可以清理吗?

不,您无法解决此问题。基本上,您的程序具有未定义的行为堆损坏是一些在调试模式下运行代码的清理工具检测到的。

无法撤消*x = 1;或恢复之前存在的值。


  

但是,调用free(x),删除x等将导致上面的代码崩溃。

当然,您正在尝试释放从未分配的内容。

  

记忆是否仍可以以某种方式释放,还是已经破灭了?

它破灭了。

相关问题