如何处理C中的free()错误?

rah*_*man 5 c free exception-handling

假设我使用了一个free()函数来释放内存,由于种种原因,我不允许这样做.如何阻止我的C应用程序崩溃并只生成错误并继续执行?我这里没有try-catch类的规定(比如C++/java ...).有没有办法忽略这个错误并继续执行?

如是,

  1. 你是怎样做的?
  2. 更重要的是,这样做是否可取(考虑到发生内存错误,继续执行)?

谢谢

Rob*_*edy 8

这当然不可取.即使你的程序版本free正确检测到你试图释放的内存无法释放,因此本身也没有任何伤害,你的程序中仍然有一个错误 - 该程序的一部分认为它拥有该内存.在释放它之前,谁知道它可能试图用那个记忆做什么?找到并修复错误.不要只是把它扫到地毯下面.


Mat*_*Mat 5

C标准中没有任何内容可以用来做你想做的事情.free函数的描述非常明确(C99中的§7.20.3.2):

free函数导致ptr指向的空间被释放,即可用于进一步分配.如果ptr是空指针,则不执行任何操作.否则,如果参数与之前由calloc,malloc或realloc函数返回的指针不匹配,或者如果通过调用free或realloc释放了空间, 则行为未定义.