c - Valgrind:抑制一次性内存泄漏

标签 c ubuntu memory-leaks valgrind

Valgrind 报告我的程序中有多个内存泄漏,其中一些是反复发生的泄漏(即它们发生在多个 block 中),但大多数是一次性的,即在程序初始化时发生的分配,我不关心在程序退出之前进行处理。我知道我可以编写抑制文件来抑制特定库、函数等的泄漏,但我还没有找到一种方法来抑制泄漏次数有限。有办法做到这一点吗?

目前,我使用我编写的一个小程序从一次性泄漏中过滤 Valgrind 的报告文件(因此当报告文件中的一段以 X bytes leaked in 1 blocks 开头时,该段是从报告文件中删除),但显然我更愿意配置 Valgrind 来抑制这些泄漏,尤其是因为我的过滤器没有做任何事情来保持泄漏摘要的准确性。

我问是因为泄漏的初始化代码是由编译器生成的,该编译器将我编写程序所用的语言编译为 C,而我对修改没有兴趣。

最佳答案

Valgrind 不会报告在程序退出时仍可访问的已分配内存的错误,因此您有真正的泄漏,即使泄漏的内存量是固定的并且(目前)无关紧要。考虑实际释放您的指针,或者确保它们不会超出范围或被覆盖。在某些情况下,您可以使用数组而不是动态分配的内存。

但是,如果您坚持使用压制来压制对真正泄漏的报告,那么请让 Valgrind 为您完成这项工作。添加选项 --gen-suppressions=yes(如果您想交互式选择要生成的抑制)或 --gen-suppressions=all(为所有生成抑制错误)到您的 valgrind 命令行。您需要将 Valgrind 输出的抑制描述符复制到抑制文件中。

关于c - Valgrind:抑制一次性内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370148/

相关文章:

c - 关于 C 中 1 元素数组的类型定义

python - 为 Python 和 C 使用通用头文件

c++ - 如何从我自己的图像中提取 PCD 文件?

C++:不删除对象/总是/内存泄漏吗?

malloc() 和 free() 的 C 动态内存问题

c++ - 使用 C++ 模板类方法的 C 回调

c - 显示大/小字节序?

bash - && 和 || 的方式有区别吗?在 Debian 和 Ubuntu 之间使用

ruby - 在 ubuntu 11.10 中安装服务员时出错

c++ - vector 内存泄漏