【发布时间】:2018-07-09 10:24:00
【问题描述】:
我是第一次尝试使用乐器。因此,我编写了一个小 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);
}
}
P.S 我标记了 C++,因为我认为上面的代码也可以用 C++ 编写。如果我错了,请删除标签。
【问题讨论】:
-
在第一个示例中,泄漏不算数,因为程序在将指针设置为
NULL后直接退出。通过在循环中分配并在循环中将指针设置为NULL,您可能会获得更好的结果。 -
@JeremyP 我已经更新了答案。这是你说要对我做的吗?
-
或多或少。可能想要写入每个分配的 RAM。
-
@JeremyP 试图在循环
temp[i] = "Hi, Hello"中分配一个字符串。仍然没有泄漏。 -
@unknownymouse 也许编译器足够聪明,可以避免您的简单程序泄漏。
标签: c xcode macos memory-leaks instruments