首页 文章

Valgrind在std string的new运算符中抱怨可能的内存泄漏

提问于
浏览
0

在我的项目中,我正在使用jsoncpp,boost和许多库,当我在包括jsoncpp在内的许多方面为我的程序运行valgrind时,它会在字符串创建中显示可能的内存泄漏

我已经粘贴了valgrind错误片段

== 5506 == 427块中的427,198字节可能在丢失记录8,343中丢失= 8,359 == 5506 ==在0x4C2B1C7:operator new(unsigned long)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中) )== 5506 == by 0x9360A88:std :: string :: _ Rep :: _ S_create(unsigned long,unsigned long,std :: allocator const&)(在/ usr / lib / x86_64-linux-gnu / libstdc .so.6.0中) .16)== 5506 == by 0x55EB0BD:char * std :: string :: _ S_construct(char const *,char const *,std :: allocator const&,std :: forward_iterator_tag)(basic_string.tcc:140)== 5506 == by 0x936261C:std :: basic_string,std :: allocator> :: basic_string(char const *,unsigned long,std :: allocator const&)(在/ usr / lib / x86_64-linux-gnu / libstdc .so.6.0中) .16)== 5506 == by 0x63FEB99:Json :: Value :: asString()const(json_value.cpp:611)

我的问题是这些错误是有效还是误报?

提前致谢

2 回答

  • 2

    要完全确定,您可以进行循环测试并检查内存占用情况 .

    我们有类似的消息,结果证明是误报,所以我们将它们添加到抑制列表中 .

  • 1

    Valgrind有一些启发式方法可以减少可能丢失的“误报”数量 .

    A.o.,它有一个启发式来更好地检测std :: string .

    使用以下选项激活一些启发式方法:--leak-check-heuristics = heur1,heur2,...用于改进泄漏搜索的启发式误报[none]其中heur是以下之一:stdstring length64 newarray multipleinheritance all none

    请注意,在即将发布的3.11版本中,此选项的默认值已从“none”更改为“all” .

相关问题