可以清理损坏的堆吗?

问题描述 投票:2回答:1

如果我腐败了我的堆,我可以事后清理它吗?如果有,怎么样?

堆损坏的示例:

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等会破坏上面的代码。记忆仍然可以以某种方式解除分配,还是已经超出了希望?

c++ memory-management memory-leaks free delete-operator
1个回答
2
投票

如果我腐败了我的堆,我可以事后清理它吗?

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

没有办法撤消*x = 1;或恢复之前驻留的值。


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

当然,你正试图释放你从未分配过的东西。

记忆仍然可以以某种方式解除分配,还是已经超出了希望?

它超越了任何希望。

© www.soinside.com 2019 - 2024. All rights reserved.