我有这个程序。我听说使用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;
}
答案 0 :(得分:2)
不,您的程序不会导致内存泄漏,因为已在add()
函数中分配的内存块已在main
函数中正确释放。
free
有效的唯一要求是传递给free
的指针来自malloc
,并且没有加倍 - free
- d。指定指针的变量的名称无关紧要。
分配和解除分配在不同功能中发生的事实也不相关。事实上,具有动态内存分配的程序在不同函数内执行分配和解除分配是很常见的。
答案 1 :(得分:2)
没有。您为一个int
分配内存,并将该内存存储在变量x
中。然后,在free(x)
时释放该内存。但是,您应该对您的功能进行if(z == NULL)
检查。
答案 2 :(得分:1)
此代码不会泄漏。
您正确地释放了已分配的内存。