在开发移动应用程序时(内存限制在2Mb或以下),在malloc()
失败时,我添加了一个回调来向UI报告错误,但后续代码仍然需要检查malloc()
的返回值,这可能会导致大量脏代码(检查返回的内存是NULL
还是分配失败导致的false
返回代码)。有没有一种优雅的方法可以在不退出()整个应用程序的情况下终止连续的代码?
你的意思是"内存分配失败后有没有一种优雅的方法可以继续"?
是的,有点,但要做对很难。通过使用setjmp
和longump
,您可以为自己提供某种类似于try/catch的紧急恢复系统,但您必须非常小心地清理调用堆栈。
此外,在清理开始真正清理分配的内存之前,任何后续对malloc的调用都可能失败。
大多数情况下,优雅将涉及确保将错误状态传递回调用堆栈,并在任何地方处理它。
所以你想通过一些弹出窗口通知用户,然后终止吗?
我不知道你在用什么库——在win32中,它就像模态窗口一样简单有自己的消息循环,因此不需要退出启动模式对话框的函数。
不管怎样,在模式对话框结束后调用出口。如果你想要一些真正的清理逻辑-这很难,我认为这是关于整个程序的结构和设计。
更新:
顺便说一句,如果内存真的很低,甚至弹出可能会失败。