繁体   English   中英

在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);
    }
}

在此处输入图片说明

PS我标记了C ++,因为我认为上面的代码也可以用C ++编写。 如果我写错了,请删除标签。

您的代码没有问题。 如预期的那样,它将导致内存泄漏。 问题(实际上是好的)是Xcode。

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

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

在此处输入图片说明

选择None [-O0]以禁用所有优化。


您可以使用仪器来分析最终的生产代码。 因此,请勿更改Release设置。 您可能会忘记将其改回,并且不会优化您的程序。

而是将Profile的方案从ReleaseDebug 这样做总是可以得到Release优化代码。

1)。 点击可执行图标 在此处输入图片说明

2)。 单击Edit Scheme 在此处输入图片说明

3)。 Build Configuration更改为Debug 在此处输入图片说明

现在,每当您分析代码时,都将得到所有错误,因为未对代码进行优化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM