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

无法检测xcode 9仪器中的C泄漏,c,xcode,macos,memory-leaks,instruments,C,Xcode,Macos,Memory Leaks,Instruments,我第一次尝试使用仪器。所以,我写了一个小C程序来检测仪器中的内存泄漏 代码: S.I标记C++,因为我认为上面的代码也可以用C++编写。如果我错了,请删除标记。您的代码没有问题。它会像您预期的那样造成内存泄漏。问题是它的好处在于Xcode Xcode优化代码以消除所有内存泄漏。这就是为什么仪器没有显示任何内存泄漏 要查看内存泄漏,请禁用Xcode中的优化 选择无[-O0]以禁用所有优化 您可以使用仪器来分析最终的生产代码。所以,不要更改发布设置。您可能忘记将其更改回来,您的程序将无法优化 而是从

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

代码:


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

您的代码没有问题。它会像您预期的那样造成内存泄漏。问题是它的好处在于Xcode

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

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

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

您可以使用仪器来分析最终的生产代码。所以,不要更改发布设置。您可能忘记将其更改回来,您的程序将无法优化

而是从发布到调试编辑概要文件的方案。这样做,您总是可以得到优化的代码发布

一,。单击可执行文件图标

二,。点击编辑方案。

三,。将生成配置更改为调试。

现在,无论何时评测代码,都会出现所有错误,因为代码没有得到优化


要分析发布代码,请在生成配置中将其更改回release。

在第一个示例中,泄漏不算在内,因为程序在将指针设置为NULL后直接退出。通过在循环中分配并在循环中将指针设置为NULL,您可能会得到更好的结果。@JeremyP我已经更新了答案。这就是你说要我做的吗?或多或少。不过,可能想写入分配的每个RAM。@JeremyP试图在循环temp[i]=Hi,Hello中分配一个字符串。仍然没有泄漏。@未知之家也许编译器足够聪明,可以避免简单程序的泄漏。
#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));
}
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);
    }
}