K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2206] c言語ポインタ完全制覇(改訂版)に関する質問
返信


投稿者:Hello World
2019/12/27 19:06:55

Link:
・realloc関数についての質問(p238 List 4-4 realloc.c)
 realloc関数の呼び出しは13行目
  
   variable_array = realloc(variable_array, sizeof(int) * size);

realloc関数について man command で調べたところ(準拠 C89 C99)、返り値の項で
「realloc関数は新たに割り当てられたメモリーへのポインタを返す。これはあらゆる組み込み型に対応できるようにアラインメントされており、ptrとは異なることもある。」と説明されています。

man command のrealloc関数の書式は以下の通り。
   void *realloc(void *ptr, size_t size);

List 4-4 realloc.cの17~19行目のfor文のブロックでsscanf関数によってヒープ領域にストアした値をprintf関数により、variable_array[i]という形で参照しています。これは実際には *(variable_array + i) という形に読み替えられていると思います。 ただ、上記のmanコマンドの返り値の項で記述されている「ptrとは異なることもある」が実際に起こった場合、List 4-4 におけるptrつまりvariable_arrayが指し示すメモリアドレスが一定ではなくなると思うので、そのメモリアドレスを起点にしてアクセスする
*(variable_array + i)は上手く目的の値をとってくることが、できないのではないでしょうか。

拙い文ではありますが、何卒よろしくお願いします。

今まだ4章の途中ですが、本当にたくさんのことも学ぶことができています。
自身の環境で実験をしながら試行錯誤ができ、とてもおもしろいです。
本を書いてくださりありがとうございました。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]