丢失的字节 - 忘记释放

这是一个调用 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 标志),它仍然会告诉我们在相关功能方面发生泄漏的位置,而不是线路。

这让我们回过头来看看在该行中分配了哪个块,并尝试向前追踪以查看它未被释放的原因。