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

时间:2011-06-30 05:28:37

标签: c exception-handling free

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

如果是,

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

C标准中没有任何内容可用于执行您想要的操作。 free函数的描述非常明确(C99中的§7.20.3.2):

  

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

答案 2 :(得分:0)

释放无效内存是一个严重的错误,应该修复,因为它可能会破坏程序的状态。尝试使用像valgrind这样的工具来发现出错的地方。

您应该使用free的唯一指针是您从malloccallocreallocNULL指针收到的指针。此外,您不应多次在同一指针上使用free