Sun Studio 12: C ユーザーズガイド

8.2.4 ステップ 4: コードの編集

ウィンドウ端末上では、任意のサイズで複数のウィンドウを開くことができます。「out of storage」のエラーメッセージが出力されたのは、 prog を実行するウィンドウ内の行数が少なすぎたためと考えられます。つまり、mymalloc() が負数を引数にして呼び出された場合にこのような状況が発生する可能性があるということです。今後このような状況が発生した場合に、もっとわかりやすいエラーメッセージ、たとえば「Screen too small」を出力してプログラムを中止するように設定しておくとよいでしょう。それには dispinit() 関数を次のように編集します。

cscope 関数: 問題箇所の修正


void
dispinit()
{
/* 表示される参照行数の最大を計算する */
    lastdispline = FLDLINE-  4;
    mdisprefs = lastdispline-  REFLINE + 1;
    if (mdisprefs > 9) {
       mdisprefs = 9;
    }
/* 表示される行の配列を割り当てる */
    displine = (int *) mymalloc(mdisprefs * sizeof(int));
}
^L/* 参照ページを表示する */

void
display()
{
    char file[PATHLEN + 1]; /* ファイル名 */
    char function[PATLEN + 1];/* 関数名 */
    char linenum[NUMLEN + 1]; /* 行番号 */
    int screenline; /* 画面行番号 */
    int width; /* ソース行表示幅 */
    register int i, j;
"display.c" 622 lines, 14326 characters

以上で、本節の最初で調査を開始した問題箇所は修正されました。これで、行数が少なすぎるウィンドウ内で prog を実行したときに、単に意味不明のエラーメッセージ「out of storage」を出力して中止するのではなく、ウィンドウサイズを検査してわかりやすいエラーメッセージを出力したあとに終了するようになります。