如果我破坏了堆,之后可以清理吗?如果是,怎么办?
堆损坏示例:
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
等将导致上面的代码崩溃。内存是否仍可以以某种方式释放,还是已经破灭了?
答案 0 :(得分:2)
如果我破坏了堆,之后可以清理吗?
不,您无法解决此问题。基本上,您的程序具有未定义的行为。 堆损坏是一些在调试模式下运行代码的清理工具检测到的。
无法撤消*x = 1;
或恢复之前存在的值。
但是,调用free(x),删除x等将导致上面的代码崩溃。
当然,您正在尝试释放从未分配的内容。
记忆是否仍可以以某种方式释放,还是已经破灭了?
它破灭了。