對於這個代碼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_想什麼?爲什麼? –