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

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

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

我已经粘贴了 valgrind 错误片段

==5506== 427,198 bytes in 489 blocks are possibly lost in loss record 8,343 of 8,359

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

==5506== by 0x9360A88: std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&) (in /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&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16)

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

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

提前致谢

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

我们有过类似的消息,但结果是误报,所以我们将它们添加到黑名单。

Valgrind 有一些启发式方法可以减少 'false positive' 可能丢失了。

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

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

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