mar*_*cot 5 c free valgrind exit-code exit
我正在编写一个生成C代码的编译器.生成的程序只包含main函数,它们使用大量内存,用malloc()分配.分配的大部分内存仅用于程序的一小部分,我认为在使用后释放它是个好主意,因为它不会再被使用.我很高兴,如果valgrind会向我报告在程序结束时内存不是free()d,即仍然可以访问的内存.我在Makefile中使用带有--error-exitcode = 1的valgrind来自动检查这种问题.
问题是:有没有办法让valgrind退出1,以防仍有可达的分配?
通过 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将超出范围。