为什么是Valgrind';在';在我的C程序中,s等于allocs和frees

为什么是Valgrind';在';在我的C程序中,s等于allocs和frees,c,memory-management,C,Memory Management,有了valgrind,我发现在我的C程序中有更多的alloc和更少的free。虽然没有发生内存泄漏,但我对C程序中的相等allocs和frees感到困惑,而valgrind显示的是不相等allocs和frees 从互联网上,我得到了这样一个答案: 此摘要基本上意味着您在没有首先释放相关的已分配内存的情况下不会丢弃任何指针(将其设置为NULL) 但是,在我的C程序中,每个malloc调用都有其相应的free调用。这是否意味着这种不平衡的分配和释放是由于所用库的功能而发生的 我的部分代码如下所示:

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

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

此摘要基本上意味着您在没有首先释放相关的已分配内存的情况下不会丢弃任何指针(将其设置为NULL)

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

我的部分代码如下所示:

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

在我的C程序中,我混淆了相等的allocs和free,但valgrind显示了不相等的allocs和free

Valgrind显示您已经创建了195个Alloc,其中49个被释放,剩下146个内存块在程序退出时仍然被分配

该块计入“仍然可到达”部分。这意味着内存被分配而没有释放,但仍然被程序引用(使用)(即仍然有一个指针指向它),所以它没有丢失(泄漏)

另一方面,如果内存块被分配,而不是释放,但指向它的所有指针都消失或被重新分配,这将是内存泄漏,并将在一个“丢失”计数器中报告

但是,每个malloc调用在myc中都有相应的free调用 节目。这是否意味着这种不平衡的分配和自由会发生 使用过的库的功能


这意味着要么内存是由外部库分配的,要么代码中有bug。正如Valgrind建议的那样,您可以使用
--泄漏检查完整
,来检查这一点。

malloc()在哪里?显示所有相关的代码。malloc()位于名为editline的库中的readline函数内。我的代码中没有malloc()。感谢您抽出时间!我现在明白了!