[英]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.