我想在下面的程序中使用realloc重新分配內存,並在使用malloc(i =(int *)malloc(5 * sizeof(int))malloc)仍然存在或不存在的realloc初始內存之後檢查,使用下面的程序我能夠訪問realoc後,我通過使用另一個指針(即* m)檢查的數據。這是正確的行爲?或一旦realloc調用內存應該是免費的?是否可以釋放現有內存?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *i,*jn, *m;
i = (int*)malloc(5 * sizeof(int));
int j,k=10;
for(j=0 ;j<5; j++)
{
i[j] = j;
printf("%d \n",i[j]);
}
for(j=0 ;j<5; j++)
{
printf("%p\n",i++);
}
jn = (int *)calloc(5, sizeof(*i));
for(j=0 ;j<5; j++)
{
printf("%p\n",jn++);
}
i = i-5;
m = i;
printf("m = %p %d\n",(m+1), *(m+1));
i =(int *)realloc(i,8*sizeof(int));
for(j=0 ;j<8; j++)
{
printf("%d\n",i[j]);
}
for(j=0 ;j<8; j++)
{
printf("%p\n",i++);
}
printf("m = %p %d\n",(m+1), *(m+1));
return 0;
}
我會考慮這是一個所有權問題,而不是一個具體的行動。如果'realloc'成功,它將獲得傳入內存的所有權(操縱它或者釋放它)並返回一個可以被調用函數使用(「擁有」)的指針。如果'realloc'失敗(返回'NULL'),你的函數保留原始內存的所有權,並且在它完成時應該釋放它。 – Myst