这个程序会导致内存泄漏吗?

Will this program result in a memory leak?

我有这个程序。我听说用 malloc 分配的内存可以在分配它的函数之外释放 - 但显然我不能在 main 中释放 z。此程序是否存在内存泄漏?

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

int *add(int x, int y);

int main(int argc, char const *argv[]) {
    int *x = NULL;
    x = add(5, 4);

    printf("%d\n", *x);
    free(x);
    return 0;
}

int *add(int x, int y) {
    int *z  =  malloc(sizeof(int));
    *z = x + y;
    return z;
}

此代码不会泄露

您正确地释放了分配的内存。

不,您的程序不会导致内存泄漏,因为在 add() 函数中分配的内存块已在 main 函数中正确释放。

freeing 有效的唯一要求是传递给 free 的指针来自 malloc,并且没有被 double-free-d .指针赋值的变量名无关紧要

分配和释放发生在不同的函数中这一事实也无关紧要。事实上,具有动态内存分配的程序在不同的函数中执行分配和释放是司空见惯的事情。

没有。您为一个 int 分配内存,并将该内存存储在变量 x 中。然后,当您 free(x) 时释放该内存。但是,您应该 if(z == NULL) 检查您的函数。