在malloc后判断返回值是否是null的,纯属“用心不是地方”,假如是null,你怎么做?
写出高质量的软件(特别是工业软件),不判断malloc返回值是不负责任的。,==在任何时候,你能检测到问题,但却置于不顾都是不负责任的。==
你必须在任何时候尽量保证你的软件控制的设备处于一种安全的状态,第一次malloc失败还远远没到完全没有办法的时候。举个例子,你的软件在控制一架电梯(只是举例,实际上,在这种程序中肯定不允许使用malloc的)。按照故障等级制定应急措施,假如malloc失败发生在无关紧要的模块上,可能导致一个三级故障,发生在核心模块上,可能导致一个一级故障,不同故障等级采取的方式是不一样的。
三级故障,你可能允许电梯停到最近的一层,打开门,然后发出故障报警并停止工作,一级故障你可能需要电梯立即停止。但无论如何不是置于不顾。malloc失败问题最简单的几种处理方法:
- 放弃当前操作,执行其它不消耗堆内存的应急处理方案;
- 预先申请应急内存(足够故障处理代码使用),在malloc失败后,释放它,并立即执行故障处理程序;
- 更紧急的情况下,可以释放很多非核心的存储,甚至直接使用某些已分配空间给应急程序使用。