[英]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));
}
在第一个图片中,没有泄漏,但是在下面的面板中,我们可以看到分配的详细信息。
在第二张图片中,没有泄漏,但是在下面的面板中,我们可以看到没有详细信息。
这是为什么? 谁能解释输出内容(顶部和底部面板)?
谢谢!
更新:
你的意思是这样吗?
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
的方案从Release
为Debug
。 这样做总是可以得到Release
优化代码。
3)。 将Build Configuration
更改为Debug
。
现在,每当您分析代码时,都将得到所有错误,因为未对代码进行优化。
要分析您的发布代码,请在Build Configuration
中将其更改回Release
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.