ウィンドウ形式の端末では、任意のサイズのウィンドウを複数使用できます。「out of storage」のエラーメッセージが出力されたのは、prog を実行するウィンドウ内の行数が少なすぎたためと考えられます。つまり、mymalloc() が負数を引数にして呼び出された場合にこのような状況が発生する可能性があるということです。今後このような状況が発生した場合に、もっとわかりやすいエラーメッセージ、たとえば「Screen too small」を出力してプログラムを中止するように設定しておくとよいでしょう。それには dispinit() 関数を次のように編集します。
cscope 関数: 問題箇所の修正
void dispinit() { /* calculate the maximum displayed reference lines */ lastdispline = FLDLINE - 4; mdisprefs = lastdispline - REFLINE + 1; if (mdisprefs > 9) { mdisprefs = 9; } /* allocate the displayed line array */ displine = (int *) mymalloc(mdisprefs * sizeof(int)); } ^L/* display a page of the references */ void display() { char file[PATHLEN + 1]; /* file name */ char function[PATLEN + 1];/* function name */ char linenum[NUMLEN + 1]; /* line number */ int screenline; /* screen line number */ int width; /* source line display width */ register int i, j; "display.c" 622 lines, 14326 characters |
以上で、本節の最初で調査を開始した問題箇所は修正されました。これで、行数が少なすぎるウィンドウ内で prog を実行したときに、単に意味不明のエラーメッセージ「out of storage」を出力して中止するのではなく、ウィンドウサイズを検査してわかりやすいエラーメッセージを出力したあとに終了するようになります。