如果仍有可达的alloc,如何使valgrind报告错误

mar*_*cot 5 c free valgrind exit-code exit

我正在编写一个生成C代码的编译器.生成的程序只包含main函数,它们使用大量内存,用malloc()分配.分配的大部分内存仅用于程序的一小部分,我认为在使用后释放它是个好主意,因为它不会再被使用.我很高兴,如果valgrind会向我报告在程序结束时内存不是free()d,即仍然可以访问的内存.我在Makefile中使用带有--error-exitcode = 1的valgrind来自动检查这种问题.

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

Emp*_*ian 2

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

int main() { return foo_main(); }
int foo_main() {  /* whatever you've emitted before */ }
Run Code Online (Sandbox Code Playgroud)

假设您没有将分配的块分配给全局变量(这没有意义,因为您只有一个函数),您刚刚将“仍然可达”转换为“绝对泄漏”。

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