ウィンドウ端末上では、任意のサイズで複数のウィンドウを開くことができます。 out of storage のエラーメッセージが出力されたのは、prog を実行するウィンドウ内の行数が少なすぎたためと考えられます。つまり、mymalloc() が負数を引数にして呼び出された場合にこのような状況が発生する可能性があるということです。 今後このような状況が発生した場合に、もっと分かりやすいエラーメッセージ、たとえば Screen too small を出力してプログラムを中止するように設定しておくとよいでしょう。それには、dispinit() 関数を以下のように編集します。
/* 表示のための初期化 */ void dispinit() { /* 表示される参照行数の最大を計算する */ lastdispline = FLDLINE - 4; mdisprefs = lastdispline - REFLINE + 1; if (mdisprefs <= 0) { (void) fprintf(stderr,"¥n%s: screen too small¥n", argv0); exit(1); } if (mdisprefs > 9) mdisprefs = 9; /* 表示される行の配列を割り当てる */ displine = (int *) mymalloc(mdisprefs * sizeof(int)); } ^L /* 参照ページを表示する */ void display()
以上で、本節の最初で調査を開始した問題箇所は修正されました。これで、行数が少なすぎるウィンドウ内で prog を実行したときに、単に意味不明のエラーメッセージ out of storage を出力して中止するのではなく、ウィンドウサイズを検査して分かりやすいエラーメッセージを出力した後に終了するようになります。