c - 当仍有可访问的分配时,如何使 valgrind 报告错误

标签 c free valgrind exit exit-code

我正在编写一个生成 C 代码的编译器。生成的程序仅包含主要功能,并且它们使用大量内存,这些内存是通过 malloc() 分配的。分配的大部分内存仅在程序的一小部分使用,我认为在使用后释放它是个好主意,因为它不会再次使用。那么,如果 valgrind 在程序结束时向我报告内存未释放()d,即仍然可访问的内存,我会很高兴。我在 Makefile 中使用带有 --error-exitcode=1 的 valgrind 来自动检查此类问题。

问题是:有没有办法让 valgrind 以 1 退出,以防仍有可访问的分配?

最佳答案

通过 Valgrind 输出进行 grep 的替代方法:修改编译器,使其发出:

int main() { return foo_main(); }
int foo_main() {  /* whatever you've emitted before */ }

假设您没有将已分配的 block 分配给全局变量(这没有任何意义,因为您只有一个函数),您只是将“仍可访问”转换为“肯定已泄漏”。

可能更好的转换:不要在你的 main 中调用 exit(0);将其改为 return 0;。最终效果应该与上面相同——__libc_main 现在将为您调用 exit,并且 main 中的所有局部变量都将超出范围到那个时候。

关于c - 当仍有可访问的分配时,如何使 valgrind 报告错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070995/

相关文章:

c - FILE 结构成员在 C 中到底意味着什么?

c - char s[] 和 char *s 有什么区别?

c - 内存分配C

链表中的 C++ 内存泄漏 (Valgrind)

c++ - 删除所有动态内存后出现 valgrind 泄漏错误

c - 关于c中的前向声明

c - 文件中的魔数(Magic Number)。 C语言编程

objective-c - Objective C 中使用 free 时出错

c - 双重释放错误释放二维数组

c++ - 为什么这会给出大小为 8 的未初始化值的使用