K.Maebashi's BBS

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

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


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


[2212] Re:c言語ポインタ完全制覇 realloc
返信


投稿者:(ぱ)こと管理人
2020/01/08 02:18:07

Link:
おや、ごぶさたしております。

>オイラは買っていませんが [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で
落ちまくってたぞ、と言いたいですねえ。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



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