仪器在C中未检测到内存泄漏

时间:2014-03-23 23:00:43

标签: c xcode memory memory-leaks

我的第一个问题是:

#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仪器没有报告它.. 但答案中有一些建议......

1 个答案:

答案 0 :(得分:2)

在请求进程终止后,操作系统将持久存储堆内存的日子已经一去不复返了。如今,OS内核足以帮助清理。

现在,你所展示的并不是内存泄漏。如果您这样做,可能被视为泄漏:

int *x = (int*)malloc(20*sizeof(int));
x = NULL;

在这种情况下,您已删除了对新内存的唯一引用。

如果您将代码放入main以外的某个函数中,它也可能被视为泄漏。