丟失的位元組 - 忘記釋放

這是一個呼叫 malloc 但不是免費的程式:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char *s;

    s = malloc(26); // the culprint 

    return 0;
}

沒有額外的引數,valgrind 將不會查詢此錯誤。

但是如果我們開啟 --leak-check=yes--tool=memcheck,如果程式是在除錯模式下編譯的話,它會抱怨並顯示導致這些記憶體洩漏的行:

$ valgrind -q --leak-check=yes ./missing_free
==4776== 26 bytes in 1 blocks are definitely lost in loss record 1 of 1
==4776==    at 0x4024F20: malloc (vg_replace_malloc.c:236)
==4776==    by 0x80483F8: main (missing_free.c:9)
==4776== 

如果程式沒有在除錯模式下編譯(例如在 GCC 中使用 -g 標誌),它仍然會告訴我們在相關功能方面發生洩漏的位置,而不是線路。

這讓我們回過頭來看看在該行中分配了哪個塊,並嘗試向前追蹤以檢視它未被釋放的原因。