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



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

你的意思是"内存分配失败后有没有一种优雅的方法可以继续"?

是的,有点,但要做对很难。通过使用setjmplongump,您可以为自己提供某种类似于try/catch的紧急恢复系统,但您必须非常小心地清理调用堆栈。

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

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

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

我不知道你在用什么库——在win32中,它就像模态窗口一样简单有自己的消息循环,因此不需要退出启动模式对话框的函数。

不管怎样,在模式对话框结束后调用出口。如果你想要一些真正的清理逻辑-这很难,我认为这是关于整个程序的结构和设计。

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

最新更新