関数を呼び出す側でポインタ変数を宣言し、そのポインタ変数を渡した関数の内部でmalloc()やrealloc()といった関数でメモリの確保や再確保を行う場合には、注意が必要です。 問題 というのは、malloc()やrealloc()の実行後、ポインタの値が変わってしまうということです。つまり、ポインタ変数の保持しているアドレスが変わるということです。これだけではなぜ重大な問題なのかわからないかもしれませんが、よく考えてみてください。関数内で宣言したポインタ変数のスコープは関数内だけであり、関数が終了すると破棄されてしまうのです。つまり、せっかく関数内で確保したメモリ領域も、その場所を示すべきポインタの値があてにならないので、アクセスできないということになります。これを示したのが次のプログラムです。 #include <stdio.h> #include <stdlib.h> void