为什么Valgrind的Heap Summary有更多的alloc和更少的释放,当它在我的C程序中相等的alloc和释放

时间:2016-03-31 09:42:37

标签: c memory-management

使用valgrind,我发现在我的C程序中有更多的alloc和更少的frees。虽然没有发生内存泄漏,但我对我的C程序中的相等alloc和frees感到困惑,但是valgrind显示了不相等的alloc和frees。

从互联网上,我得到了这样的答案:

这个摘要基本上意味着你没有丢弃任何指针(将它们设置为NULL)而没有先释放相关的已分配内存。

但是,每个malloc调用在My C程序中都有相应的free调用。是否意味着由于使用过的库的功能而导致这种不平衡的分配和释放。

我的部分代码如下:

    char* input=readline("Lispy> ");      
    add_history(input);
    printf("No you're a %s\n", input);
    free(input);

Valgrind表示:

enter image description here

1 个答案:

答案 0 :(得分:4)

  

我对我的C程序中的相同alloc和frees感到困惑,但valgrind显示了不相等的alloc和frees。

Valgrind显示你已经发出195个分配,其中49个被释放,剩下146个内存块,当程序退出时仍然分配。

阻止计数到"仍然可以到达"部分。这意味着内存已分配但未被释放,但仍被程序引用(使用)(即仍有一个指向它的指针),因此它不会丢失(泄露)。

另一方面,如果分配了内存块,但没有释放,但指向它的所有指针都已消失或重新分配,那将是一个内存泄漏,并将报告在其中一个"丢失"计数器。

  

但是,每个malloc调用在My C中都有相应的免费调用   程序。这是否意味着这种不平衡的分配和免费发生   到使用过的图书馆的功能。

这意味着该内存是由外部库分配的,或者您的代码中存在错误。正如Valgrind建议的那样,您可以使用--leak-check-full来检查这一点。