无法检测 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
。
我是第一次尝试使用乐器。所以,我写了一个小的 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
。