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

时间:2015-01-20 21:17:15

标签: c memory free

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

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

我需要检查是否可以免费避免双重免费。有人能给我一些线索吗?

2 个答案:

答案 0 :(得分:12)

您无法检查它是否已经free&#d; free的签名应该告诉您那么多;它无法修改来自调用者角度的指针)。但是,您可以执行以下两种操作之一。

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

  2. 将指针设置为null并双倍释放所有你喜欢的内容。 free(NULL)完全有效。


  3. 我更喜欢选项1,现在学习本课程将有助于您在未来编写更好的代码。

答案 1 :(得分:4)

+1给Ed S.的答案。

但是,运行valgrind - 它会快速获取许多动态内存分配错误,并且可能比您更好地阅读代码。