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