假设我使用free()
函数释放内存,由于种种原因,我不允许这样做。
如何阻止我的C应用程序崩溃并只生成错误并继续执行?我这里没有try-catch类的规定(比如C ++ / java ...)。有没有办法忽略这个错误并继续执行?
如果是,
谢谢
答案 0 :(得分:8)
这当然不可取。即使你的程序的版本free
正确检测到你试图释放的内存无法释放,因此本身没有任何伤害,你的程序中仍然有一个错误 - 该程序的一部分被认为它拥有那种记忆。在释放它之前,谁知道它可能试图用那个记忆做什么?找到并修复错误。不要只是把它扫到地毯下面。
答案 1 :(得分:5)
C标准中没有任何内容可用于执行您想要的操作。 free
函数的描述非常明确(C99中的§7.20.3.2):
free函数导致ptr指向的空间被释放,即被释放 可供进一步分配。如果ptr是空指针,则不执行任何操作。 否则,如果 参数与之前由calloc,malloc或者返回的指针不匹配 realloc函数,或者如果通过调用free或realloc释放空间, 行为未定。
答案 2 :(得分:0)
释放无效内存是一个严重的错误,应该修复,因为它可能会破坏程序的状态。尝试使用像valgrind这样的工具来发现出错的地方。
您应该使用free
的唯一指针是您从malloc
,calloc
或realloc
或NULL
指针收到的指针。此外,您不应多次在同一指针上使用free
。