当malloc()失败时,哪个是处理错误的最佳方法?如果失败,我想立即退出程序,我通常会使用exit().但在这种特殊情况下,我不太确定exit()是否会成为这里的方式.
R..*_*R.. 13
在库代码中,除非调用者破坏了库的文档化界面的联系,否则调用exit或abort在任何情况下都是绝对不可接受的.如果您正在编写库代码,则应该优雅地处理任何分配失败,释放在尝试操作中获取的任何内存或其他资源,并将错误条件返回给调用者.然后调用程序可以决定exit,abort,拒绝任何命令用户给这需要过多的内存,释放一些不需要的数据,然后再试一次,或任何有意义的应用.
在所有情况下,如果您的应用程序保存的数据尚未同步到磁盘并且对用户具有一些潜在价值,那么您应该尽一切努力确保不会丢弃有关分配失败的数据.用户几乎肯定会非常生气.最好设计你的应用程序,以便"保存"功能不需要任何分配,但如果你不能这样做,你可能会想要经常执行自动保存到临时文件操作或提供以不是标准文件格式(可能需要丑陋的XML和ZIP库,每个都有自己的分配需求,写入)的形式将内存内容转储到磁盘的方式,而是更多的"原始转储"
如果malloc()返回NULL则表示分配不成功.由你来处理这个错误案例.由于分配失败,我个人觉得退出整个过程太过分了.以其他方式处理它.