如您所知,在我们使用动态变量后,我们free()
。
但是,有时这些变量已经free()
d。
我需要检查是否可以免费避免双重免费。有人能给我一些线索吗?
答案 0 :(得分:12)
您无法检查它是否已经free
&#d; free
的签名应该告诉您那么多;它无法修改来自调用者角度的指针)。但是,您可以执行以下两种操作之一。
更改您的设计。谁对这段记忆负责?看起来你的设计似乎没有说清楚,这是内存泄漏的最常见原因。将所有权放在代码的一部分上并完成它。为什么中断函数会有条件地释放内存?为什么这似乎是最合乎逻辑的解决方案?
将指针设置为null
并双倍释放所有你喜欢的内容。 free(NULL)
完全有效。
我更喜欢选项1,现在学习本课程将有助于您在未来编写更好的代码。
答案 1 :(得分:4)
+1给Ed S.的答案。
但是,运行valgrind
- 它会快速获取许多动态内存分配错误,并且可能比您更好地阅读代码。