我的第一个问题是:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, const char * argv[])
{
int *x = (int*)malloc(20*sizeof(int));
x[0] = 10;
x[1] = 10;
sleep(60);
return 0;
}
上面是否有内存泄漏?
有人可能会认为这是这个的转贴(虽然链接的问题来自C ++,但应该是相同的):Why doesn't Xcode + Instrument Leaks detect this leak in simple C++ program,也许我没有理解那里的答案,那里的答案声称上面的代码没有泄漏,我发现这是相互矛盾的。由于显然存在泄漏,我们不会释放我们分配的内存。
另一个主题是为什么(在我的情况下)Leaks仪器没有报告它.. 但答案中有一些建议......
答案 0 :(得分:2)
在请求进程终止后,操作系统将持久存储堆内存的日子已经一去不复返了。如今,OS内核足以帮助清理。
现在,你所展示的并不是内存泄漏。如果您这样做,可能被视为泄漏:
int *x = (int*)malloc(20*sizeof(int));
x = NULL;
在这种情况下,您已删除了对新内存的唯一引用。
如果您将代码放入main
以外的某个函数中,它也可能被视为泄漏。