printf を使用して a1 と a2 を出力すると、変数 a1 の値は 5 になり、a2 の値は 4 になりますか?
はい。それで合っています。ただし、尋ねるよりも試して見る方が簡単なので、少し奇妙な質問です。
したがって、malloc を使用してメモリを割り当て、そのメモリ空間内のポイントを割り当て、再度 malloc を使用してメモリを割り当てると、メモリの別の部分へのポイントが存在しますが、メモリの最初の部分はまだ存在しますか?
それは正しいです。malloc()
を使用して解放するまで「存在する」メモリを割り当てるfree()
かrealloc()
、データを別のメモリに移動して古いメモリの場所を解放する可能性のある を実行します。それに関するドキュメントを読むことをお勧めします。少なくともマニュアルページ。
また、コードにエラーがあります。比較の代わりに割り当てを使用し、変数i
が定義されていません。を含む修正版を次に示しますprintf()
。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a,*a1,*a2;
int i;
for (i=1; i<=2; i++) {
a = malloc(sizeof(int));
if (i==1)
a1 = a;
else if (i==2)
a2 = a;
}
*a1=5;
*a2=4;
printf("a1=%d, a2=%d\n", *a1, *a2);
free(a1);
free(a2);
return EXIT_SUCCESS;
}
それが役に立てば幸い。幸運を!