当malloc失败时,如何在没有exit()的情况下结束连续的代码?

时间:2012-08-24 09:18:37

标签: c malloc

开发移动应用程序(约2Mb或更少的有限内存),在malloc()失败时,我添加了一个回调来向UI报告错误,但是后续代码仍然需要检查malloc()的返回值,这可能会导致大量脏代码(检查返回的内存是NULL还是由分配导致的false返回代码失败)。是否有一种优雅的方式来终止连续代码而不退出()整个App?

2 个答案:

答案 0 :(得分:3)

你的意思是'在内存分配失败后是否有一种优雅的方式继续'?

是的,有一点,但做起来很难。通过玩setjmplongump你可以给自己一些类似于try / catch的紧急恢复系统,但你必须非常小心清理为你传递了调用堆栈。

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

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

答案 1 :(得分:1)

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

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

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

<强>更新
顺便说一句,如果内存非常低,即使弹出窗口可能会失败。