9

EOutOfMemory在捕获异常或现在堆或堆栈很可能损坏后继续执行是否有意义?

我不是指EOutOfMemory由于写入野地址等错误而导致先前内存损坏的情况,我的意思是调用GetMem和捕获的正确代码EOutOfMemory

4

2 回答 2

6

在我看来,尝试从EOutOfMemory. 根据我的经验,堆损坏的可能性非常高,并且可以预期未来的错误。通常,最安全的做法是终止进程。

于 2013-02-20T09:23:04.710 回答
1

总的来说,我同意试图恢复是没有意义的。但它在特定情况下很有用。例如,根据用户选择分配大量内存,如果失败,您可以完全退出并让他们使用不同的设置重试。我这样做是为了将点云转换为 3D 网格,其中包括一些事先不知道内存要求的步骤。它只需对您希望可恢复的步骤进行仔细编码,并具有立即且干净的回退路径。例如,我的一些数据结构是位图或缓冲区,每一行都是单独分配的,以最大限度地减少碎片内存的问题。构造函数尝试...除了处理并抛出 EOutOfMemory 异常,析构函数释放任何已分配的行。我可以'

于 2013-03-07T01:34:30.993 回答