おや、ごぶさたしております。
>オイラは買っていませんが [2206] で
>> variable_array = realloc(variable_array, sizeof(int) * size);
>と引用されていますね。典型的やってはダメと巷で解説されている例でしょう。
この箇所、書籍では、地の分で
| List4-4では,ユーザーがint型の値を入力するたびに,realloc()を使って
| variable_arrayを拡張しています(ここでも,戻り値のチェックは省略しています).
と書いておりまして、「戻り値のチェックは省略しています」という言い訳を付けています。
realloc()の挙動を知るためのサンプルプログラムとしてはありではないでしょうか?
ではサンプルではない場合にどうするかといえば、
malloc()だろうとrealloc()だろうと直接呼ぶのはそれ自体NGで、
なんらかのラップをかぶせ、「死ぬしかないにしても、(Segmentation faultではなく)
メモリ不足で死んだことがわかるようにする」というのが最低限の対策だと
思っています。
>でもまあ realloc() に失敗するような状況だとほかの処理も一切できなくて
>終了するしかない、ってのが実情で、
20年近く前に
http://kmaebashi.com/programmer/c_yota/malloc.html
の「戻り値チェック」のところにいろいろ書いてて、書籍の方にも似たことを
書いています。
JavaでOutOfMemoryErrorをcatchもしないくせに、Cでmalloc()の戻り値だけ
気にしたってしょうがない。それを言うならRubyなんてかつてはmalloc()が
NULLを返しただけで(適切なエラーメッセージも出さず)Segmentation faultで
落ちまくってたぞ、と言いたいですねえ。