> ①第4章、List 4-4 realloc.c(p238)でint型の値(数値)を入力しても、
>17行目〜19行目のprintf("variable_array[%d]..%d¥n", i, variable_array[i]);が
>表示されません。
このプログラムは、数値を入力するwhileループが11~15行目にあり、
そのwhileループが終わった後、17~19行目に、配列の内容を表示する
forループがあります。whileループが終わってからforループが始まるので、
値(数値)を入力するたびに何かが表示されるわけではありません。
このプログラムは、
①ユーザが数値をいくつか入力する。いくつ入力するかはわからない。
②ユーザが数値の入力を終えたら、入力された数値を全部表示する。
というものです。①が終わってから②を実行します。
①でユーザがいくつ数値を入力するかわからないから、realloc()で
配列を伸ばしていく、というのが趣旨です。
①で、入力を終えるには、Windowsなら、数値をいくつか入力後、
Ctrl+Z を押してからENTERを押してください。
> ②List4-3,4-4でfree(variable_array);と私は記述を加えました。
>本章でfree()を使われていないのはどのような理由からでしょうか。
>入門者向け学習サイトでは「必ずfree()」,「プログラム終了時に消える」、
>様々な事が書かれています。
それについては25年くらい前にここに書きました。
https://kmaebashi.com/programmer/c_yota/malloc.html
WindowsでもLinuxでも、まともなOSならプログラム終了時にはfree()しなくても
解放してくれるので、たとえばライブラリとして再利用することなど考えられない
書籍のサンプルコードでは、free()は不要だと私は考えています。
当時のfj.comp.lang.cのやりとりも検索したら残っていました。
https://groups.google.com/g/fj.comp.lang.c/c/G4HRnHTdImg?pli=1
まあ、これぐらいもめる話ではあるので、深入りしないほうが無難かと思います……