簡體   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