0

在开发手机App时(内存有限2Mb以下),malloc()失败时,我添加了回调向UI报告错误,但是后续代码仍然需要检查返回值malloc(),这可能会导致很多脏代码(检查返回的内存是不是分配失败导致NULL的返回码)。false有没有一种优雅的方法来终止连续代码而不用 exit() 整个应用程序?

4

2 回答 2

3

您的意思是“内存分配失败后是否有一种优雅的方式可以继续”?

是的,有,但很难做到正确。通过玩setjmpandlongump你可以给自己一些类似于 try/catch 的紧急恢复系统,但是当你传递调用堆栈时你必须非常小心地清理。

此外,在您的清理开始实际清理分配的内存之前,对 malloc 的任何后续调用都可能失败。

大多数情况下,优雅将涉及确保您将错误状态传递回调用堆栈,并在任何地方处理它。

于 2012-08-24T09:30:53.370 回答
1

所以你想通过一些弹出窗口通知用户然后终止?

我不知道您使用的是什么库 - 在 win32 中这很容易,因为模态窗口有自己的消息循环,因此您不需要退出启动模态对话框的函数。

无论如何,您在模态对话框完成后调用退出。如果你想要一些真正的清理逻辑——这很难,而且我认为这与整个程序结构和设计有关。

更新
顺便说一句,如果内存真的很低,即使弹出窗口可能会失败。

于 2012-08-24T09:41:25.053 回答