检查内存是否已在 C 中释放
Check if memory was already freed in C
如您所知,在我们使用完动态变量后,我们 free()
它们。
但是,有时这些变量已经 free()
d。
我需要检查它是否免费以避免双重免费。谁能给我一个线索?
你不能检查它是否已经被 free
了(free
的签名应该告诉你很多;它不能从调用者的角度修改指针)。但是,您可以执行以下两项操作之一。
改变你的设计。谁负责这段记忆?似乎您的设计并没有说清楚,这是内存泄漏的最常见原因。将所有权放在代码的一部分上并完成它。为什么中断函数会有条件地释放内存?为什么这看起来是最合乎逻辑的解决方案?
将指针设置为null
,随心所欲地双倍释放。 free(NULL)
完全有效。
我更喜欢选项 1,现在学习本课将帮助您编写更好的代码。
+1 到 Ed S. 的回答。
而且,运行 valgrind
- 它会快速发现许多动态内存分配错误,并且可能比您更擅长阅读您的代码。
如您所知,在我们使用完动态变量后,我们 free()
它们。
但是,有时这些变量已经 free()
d。
我需要检查它是否免费以避免双重免费。谁能给我一个线索?
你不能检查它是否已经被 free
了(free
的签名应该告诉你很多;它不能从调用者的角度修改指针)。但是,您可以执行以下两项操作之一。
改变你的设计。谁负责这段记忆?似乎您的设计并没有说清楚,这是内存泄漏的最常见原因。将所有权放在代码的一部分上并完成它。为什么中断函数会有条件地释放内存?为什么这看起来是最合乎逻辑的解决方案?
将指针设置为
null
,随心所欲地双倍释放。free(NULL)
完全有效。
我更喜欢选项 1,现在学习本课将帮助您编写更好的代码。
+1 到 Ed S. 的回答。
而且,运行 valgrind
- 它会快速发现许多动态内存分配错误,并且可能比您更擅长阅读您的代码。