不使用free()malloc的警告

时间:2015-04-07 20:42:52

标签: c

GCC内置了哪些安全措施来检查内存泄漏?如果是这样,我该如何使用它们?当我使用" gcc -Wall -o run run.c"进行编译时,编译器似乎并不关心在代码末尾是否释放了任何已分配的堆空间。我在Google上找不到任何简单的修复方法。

非常感谢你的时间。

编辑: 谷歌搜索确实指出了Valgrind和其他工具。但我很好奇为什么编译器无法解决这个问题。作为一个新手,检查每个" malloc"是否足够简单。有一个"免费"与之相关联。

2 个答案:

答案 0 :(得分:3)

有两种方法可以分析问题的代码 - 静态分析和运行时分析。静态分析读取代码 - 这是编译器真正做得很好的。代码问题的运行时分析发生在代码链接到另一组库时,这些库可以看到代码在监视下运行时实际执行的操作。查找内存泄漏对于静态分析很困难,但对于运行时分析包则不然。

其他运行时分析就像代码覆盖一样 - 代码的所有部分都运行了吗? gcov这样做,就像valgrind和电栅栏一样,寻找泄漏等记忆问题。

所以,不,没有真正好的编译器安全措施来测试内存泄漏。

答案 1 :(得分:0)

-fsanitize=leak GCC标志。

它会覆盖malloc / calloc / free以使它们分配并释放内存块。
如果使用此标志编译程序,则会在执行后将有关检测到的泄漏的信息打印到终端。

您可以阅读herehere

<小时/> 此外,我从未使用它,所以这个答案完全基于GCC手册。