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

Moh*_*HME 1 c memory free

如您所知,在我们完成使用动态变量之后我们就free()可以了.

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

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

Ed *_* S. 12

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

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

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


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