繁体   English   中英

Valgrind抱怨std字符串的新运算符中可能发生内存泄漏

[英]Valgrind complaining possible memory leak in std string's new operator

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

我已经粘贴了valgrind错误片段

== 5506 == 489个块中的427,198字节可能会在8,359的丢失记录8,343中丢失

== 5506 == at 0x4C2B1C7:operator new(unsigned long)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)

== 5506 ==通过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 ==通过0x55EB0BD:char * std :: string :: _ S_construct(char const *,char const *,std :: allocator const&,std :: forward_iterator_tag)(basic_string.tcc:140)

== 5506 ==通过0x936261C:std :: basic_string,std :: allocator> :: basic_string(char const *,unsigned long,std :: allocator const&)(在/ usr / lib / x86_64-linux-gnu / libstdc ++中。如此(6.0.16)

== 5506 ==通过0x63FEB99:Json :: Value :: asString()const(json_value.cpp:611)

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

提前致谢

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

我们有类似的消息,但结果却是误报,因此我们将它们添加到了禁止列表中。

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

o,它具有启发式功能,可以更好地检测std :: string。

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

请注意,在即将到来的3.11版本中,此选项的默认值已从“无”更改为“全部”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM