无法检测 xcode 9 台仪器中的 C 泄漏

Can't detect C leaks in xcode 9 instruments

我是第一次尝试使用乐器。所以,我写了一个小的 C 程序来检测仪器中的内存泄漏。

代码:

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

int main()
{
    int *temp = NULL;
    temp = (int*)malloc(100*sizeof(int));
    for (int i = 0; i<100; ++i) {
        temp[i] = i;
    }
    printf("%d", *(temp+1));
    printf("Hello   ");
    temp = NULL;
    usleep(10000000);
    printf("%d", *(temp+1));
}


当我使用free(temp)


在第一张图片中,没有泄漏,但在下面的面板中我们可以看到分配的详细信息。

在第二张图片中,没有泄漏,但在下面的面板中我们可以看到没有细节。

这是为什么?任何人都可以解释输出(顶部和底部面板)吗?

谢谢!


更新:

你的意思是这样?

int main()
{
    char **temp = NULL;
    temp = (char**)malloc(100*sizeof(char*));
    for (int i = 0; i<100; ++i) {
        temp[i] = (char *)malloc(100*sizeof(char));
        temp[i]=NULL;
        usleep(2000000);
    }
}

P.S 我打上C++的标签是因为我觉得上面的代码也可以用C++来写。如果我错了,请删除标签。

你的代码没有问题。如您所料,它会造成内存泄漏。问题(实际上是好的)是 Xcode.

Xcode 优化您的代码以消除所有内存泄漏。这就是仪器没有显示任何内存泄漏的原因。

要查看内存泄漏,请禁用 Xcode 中的优化。

Select None [-O0] 禁用所有优化。


您使用仪器分析最终的生产代码。所以,不要更改 Release 设置。你可能会忘记改回来,你的程序将不会被优化。

而是将 Profile 的方案从 Release 编辑为 Debug。这样做你总能获得针对 Release.

的优化代码

1). 点击可执行图标

2). 点击 Edit Scheme

3).Build Configuration 更改为 Debug

现在,无论何时分析代码,都会出现所有错误,因为代码未优化。

要分析您的发布代码,请在 Build Configuration 中将其改回 Release