开发移动应用程序(约2Mb或更少的有限内存),在malloc()
失败时,我添加了一个回调来向UI报告错误,但是后续代码仍然需要检查malloc()
的返回值,这可能会导致大量脏代码(检查返回的内存是NULL
还是由分配导致的false
返回代码失败)。是否有一种优雅的方式来终止连续代码而不退出()整个App?
答案 0 :(得分:3)
你的意思是'在内存分配失败后是否有一种优雅的方式继续'?
是的,有一点,但做起来很难。通过玩setjmp
和longump
你可以给自己一些类似于try / catch的紧急恢复系统,但你必须非常小心清理为你传递了调用堆栈。
此外,在清理开始实际清理已分配的内存之前,对malloc的任何后续调用都可能失败。
大多数情况下,优雅将涉及确保您将错误状态传递回调用堆栈,并在任何地方处理它。
答案 1 :(得分:1)
所以你想通过一些弹出窗口通知用户然后终止?
我不知道你正在使用什么库 - 在win32中它很容易作为模态窗口 有自己的消息循环,因此您不需要退出启动模式对话框的函数。
无论如何,在模态对话框完成后调用退出。如果你想要一些真正的清理逻辑 - 这很难,而且我认为它是关于整个程序结构和设计的。
<强>更新强>:
顺便说一句,如果内存非常低,即使弹出窗口可能会失败。