Valgrind在我的程序中报告了多个内存泄漏,其中一些是重复泄漏(即它们发生在多个块中),但大多数都是一次性的,即在程序初始化时发生的分配以及我没有。在程序退出之前要小心照顾。我知道我可以编写抑制文件来抑制特定库,函数等的泄漏,但我还没有找到一种方法来抑制泄漏次数有限。有没有办法做到这一点?
目前,我使用我编写的一个小程序来过滤一次性泄漏的Valgrind报告文件(因此当报告文件中的段落以X bytes leaked in 1 blocks
开头时,该段落将从报告中删除文件),但显然我更喜欢配置Valgrind来抑制这些泄漏,尤其是因为我的过滤器没有做任何事情来保持泄漏汇总的准确性。
我问,因为泄漏的初始化代码是由编译器生成的,编译器从我编写程序的语言编译为C并且我没有兴趣修改。
答案 0 :(得分:2)
Valgrind不会报告在程序退出时仍可访问的已分配内存的错误,因此即使泄漏的内存量是固定的(目前)无关紧要,您也会有真正的泄密。考虑实际上释放你的指针,或者确保它们不会超出范围或被覆盖。在某些情况下,您可以使用数组而不是动态分配的内存。
如果你坚持使用抑制来沉默真实泄漏的报告,那么让Valgrind为你做的工作。添加选项--gen-suppressions=yes
(如果要交互式选择要生成的抑制)或--gen-suppressions=all
(以生成对所有错误的抑制)到valgrind
命令行。您需要将抑制描述符Valgrind输出复制到抑制文件中。