如果我腐败了我的堆,我可以事后清理它吗?如果有,怎么样?
堆损坏的示例:
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
等会破坏上面的代码。记忆仍然可以以某种方式解除分配,还是已经超出了希望?
如果我腐败了我的堆,我可以事后清理它吗?
不,你无法解决这个问题。基本上你的程序有不确定的行为。在调试模式下运行代码的一些清理工具会检测到堆损坏。
没有办法撤消*x = 1;
或恢复之前驻留的值。
但是,调用free(x),删除x等会崩溃上面的代码。
当然,你正试图释放你从未分配过的东西。
记忆仍然可以以某种方式解除分配,还是已经超出了希望?
它超越了任何希望。