检查内存是否已在 C 中释放

Check if memory was already freed in C

如您所知,在我们使用完动态变量后,我们 free() 它们。

但是,有时这些变量已经 free()d。

我需要检查它是否免费以避免双重免费。谁能给我一个线索?

你不能检查它是否已经被 free 了(free 的签名应该告诉你很多;它不能从调用者的角度修改指针)。但是,您可以执行以下两项操作之一。

  1. 改变你的设计。谁负责这段记忆?似乎您的设计并没有说清楚,这是内存泄漏的最常见原因。将所有权放在代码的一部分上并完成它。为什么中断函数会有条件地释放内存?为什么这看起来是最合乎逻辑的解决方案?

  2. 将指针设置为null,随心所欲地双倍释放。 free(NULL) 完全有效。


我更喜欢选项 1,现在学习本课将帮助您编写更好的代码。

+1 到 Ed S. 的回答。

而且,运行 valgrind - 它会快速发现许多动态内存分配错误,并且可能比您更擅长阅读您的代码。