抑制"可能丢失"当内部指针偏移已知时,valgrind中的错误

时间:2015-01-06 00:01:56

标签: c++ c valgrind

我有大量内部指针的代码,我想使用valgrind来检测内存泄漏。不幸的是,这意味着我在“可能丢失”的类别中得到了很多垃圾。

我在代码的一部分中使用自定义内存分配器,它从malloc分配块然后管理块本身。分配器使用正常的内部指针技巧 - 实际应用程序在块头之后接收到块的内部指针。

因此,如果应用程序保持退出时的块,则报告为“可能丢失”,因为应用程序正在保持指向块的内部指针。但是,我知道标题大小,所以理论上我可以派生开始指针。

有没有办法告诉valgrind在起始指针的已知偏移处忽略内部指针,以便检查应用程序中的泄漏?

2 个答案:

答案 0 :(得分:0)

您可以使用valgrind的抑制文件功能来实现您的目标。您可以指出不应报告最初由分配函数创建的“可能丢失”的内存块。

但是,如果valgrind无法找到任何指针,它仍然会将该块报告为“绝对丢失”。

有关如何创建抑制文件的详细信息,请参阅valgrind的文档。

答案 1 :(得分:0)

Valgrind有几种启发式方法可以将内部指针视为“真正的指针”。 这些启发式方法用

激活
--leak-check-heuristics=heur1,heur2,... which heuristics to use for
        improving leak search false positive [none]
        where heur is one of:
          stdstring length64 newarray multipleinheritance all none

其中一种启发式方法可能与您的情况相符。 或者,您将不得不修改valgrind启发式逻辑来添加您的 自己的特定情况(文件memcheck / mc_leakcheck.c函数heuristic_reachedness)

如果您要添加的逻辑足够通用, 最好的方法是提交描述所需启发式的valgrind错误(严重性愿望)。