簡體   English   中英

Valgrind內存泄漏日志

[英]Valgrind Memory Leak Log

在valgrind中,我們有這樣的泄漏日志

==15788== 480 bytes in 20 blocks are definitely lost in loss record 5,016 of 5,501    

==20901== 112 (48 direct, 64 indirect) bytes in 2 blocks are definitely lost in loss record 3,501 of 5,122 

==20901== 1,375,296 bytes in 78 blocks are possibly lost in loss record 5,109 of 5,122

==20901== Conditional jump or move depends on uninitialised value(s)    

==20901== Use of uninitialised value of size 8

在Valgrind的文檔中,我找不到確切的詳細信息。 可以請人解釋一下

我知道肯定會丟失-分配的內存根本不會釋放。 但是“ 20個區塊”是什么意思,“ 5,501個損失記錄中的5,016個損失”是什么意思。 如果它說丟失了480個字節,那么這意味着一次循環運行還是總計..?

在第二行中,“肯定會丟失2個塊中的112(48個直接,64個間接)字節”,這意味着“ 48個直接,64個間接”字節。

而且我理解“可能丟失”的意思,但這是否意味着valgrind不知道這是否是泄漏..?

關於第四行,我一點也不知道。 我檢查了隨第四行提供的調用堆棧。 我沒有注意到任何“跳躍或移動”。

對於第五行,它表示未初始化在此代碼段的最后一行。 我在這里看不到任何未初始化的值。

char *data = new char[somebigSize];
memset(data, '\0', somebigSize);
int sizeInt = sizeof(int);
int length = 20; //some value obtained
int position = 10; 
char *newPtrVar = new char[sizeInt + 1];
memset(newPtrVar, '\0', sizeInt + 1);
memcpy(newPtrVar, &length, sizeInt);
memcpy(&data[position], newPtrVar, sizeInt);

valgrind手冊對此進行了詳細介紹。 這非常復雜-請參閱鏈接以獲取全部詳細信息,但從本質上講,您可以擁有:

  • “仍然可達”(指針所指向的內存)。
  • “直接丟失”(未指向任何活動指針的內存)
  • “間接丟失”(由內存中“直接丟失”的指針指向的內存)
  • “可能丟失”(指向的內存,但是指針沒有指向內存的開始)。

最后一種情況可能是一些隨機指針,可能類似於內存管理器,它在內存返回給用戶之前分配了一個紅色區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM