[2208] Re:c言語ポインタ完全制覇(改訂版)に関する質問
投稿者:Hello World
2020/01/02 15:39:55
回答ありがとうございます。と共に返信遅くなり、申し訳ありません。
>はい。realloc()は引数で渡されたポインタとは異なるポインタを返すこともあります。
>2-6-6(p.147)にも書いたとおりです。
2-6-6 読み直しました。4章(List 4-4 realloc.c)で色々試したことにより深く理解することができました。 ありがとうございます。
>どこに疑問を持たれているのかいまひとつわかりませんが、
>確かにrealloc()は異なるアドレスを返すことがあります。
>たとえばrealloc()が6回目までは同じアドレスAを返し、7回目の呼び出しで
>アドレスBを返したとして、Bを返すとき、realloc()は
>A[0]~A[5]をB[0]~B[5]にコピーしてから返します。
>よって、このサンプルでは、17行目からのforループで値を表示することは
>問題なくできます。
>
>これで回答になっていますでしょうか?
はい、的確な回答ありがとうございます。
17行目の部分も理解することができました。ありがとうございます。
>実験できる環境があるのでしたら、realloc()の下で実際にポインタの値を
>表示してみると挙動がわかるかもしれません。
>具体的には13行目と14行目の間に以下の2行を挿入します。
>
>printf("variable_array..%p\n", variable_array);
>malloc(10);
>
>明らかに無駄に見える2行目のmalloc(10);は、realloc()で確保した領域の
>続きを埋めることでrealloc()が別の領域を返すことを促すためのものです
>(コンパイラが最適化で消してしまうかもしれませんが、私の環境(Linux上のgcc)では
>最適化オプションを付けなければ大丈夫でした)。これを付けないと、
>何度呼んでもrealloc()は同じアドレスを返しました。後ろが空いているからでしょう
>(p.147参照)。
>
>上記2行を足すことで、私の環境では、realloc()は7回目で異なるアドレスを
>返してきました。
アドレスを表示することは何度もやっていましたが、mallocにより別の領域を返すことを促す発想はありませんでした。
ちなみにわたしの環境では、realloc()は6回目で異なるアドレスを返してきました。
もう一つ質問があります。
ポインタ完全制覇を読んでみて、処理系がどのようにプログラマーの書いたコードを解釈しているのかが理解できれば、より理解が深まるなと考えています。そこで処理系に関する
おすすめの書籍などがあれば教えていただけると非常に嬉しいです。
回答ありがとうございました。