对于这个代码C:分配内存混乱
#include <stdlib.h>
#include <stdio.h>
int *f (int n)
{
int *ptr = malloc (sizeof (int));
*ptr = n;
return ptr;
}
int main()
{
int i;
int **ptr = malloc (sizeof (int *));
ptr[0] = f (0);
for (i = 0; i < 5; ++i)
{
ptr = realloc (sizeof (int *) * (i + 2));
ptr[i + 1] = malloc (sizeof (int));
ptr[i + 1] = f (i + 1);
}
for (i = 0; i < 5; ++i)
{
printf ("%d\n", *ptr[i]);
free (ptr[i]);
}
free (ptr);
return 0;
}
不程序分配两次比它需要的?
是的,它也会泄漏内存。 –
我想这里的东西是学术(家庭作业),但'valgrind --leak-check = full'在这里可以很好地帮助你(用调试信息编译你的程序来获取你可能泄漏内存的行号)。请注意,顺便说一句,你的程序当前版本不会编译。 – Evert
_you_想什么?为什么? –