【发布时间】:2021-04-24 02:40:15
【问题描述】:
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int *mem(void){
//int buf[]= {1,1,2,3};
int *buf = malloc(2 * sizeof(int));
buf[1] = 1;
return buf;
free(buf);
}
int main(void){
int *a[1] = { &mem()[1] };
printf("%d", *a[0]};
free(a[0]);
return 0;
}
正如预期的那样,输出为 1,但是当我检查 Valgrind 时,出现内存泄漏,显示 3 个分配和 2 个释放。我不想在这里使用static。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
为什么在一个函数中将
free放在return之前,而在另一个函数中却相反? -
您的
a[0]实际上是&buf[1]。释放内存的正确方法是将malloc()函数返回的确切值传递给free()函数。只是为了好玩尝试free(a[0] - sizeof(int)); -
free(buf)无法访问 - 您是否记得启用一组合理的编译器警告?如果你有,你可能需要一个更好的编译器......
标签: c memory-leaks