以下のプログラムでreallocを使ってメモリを再割り当てしようとしていますが、malloc(i =(int *)malloc(5 * sizeof(int)))を使って反応した初期メモリをreallocした後もチェックしています私は別のポインタ(すなわち* m)を使ってチェックしたrealocの後にデータにアクセスすることができます。これは適切な行動ですか?またはreallocが呼び出されるとメモリは解放されるべきですか?は、既存のメモリを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'が成功した場合、それは着信メモリの所有権を取るか(それを操作するか' free'ingする)、呼び出し関数によって使用できる(所有されている)ポインタを返します。 'realloc'が失敗した場合(' NULL'を返す)、あなたの関数は元のメモリの所有権を保持し、それが終了したら '解放 'しなければなりません。 – Myst