Hitachi

COBOL2002 ユーザーズガイド


37.7.2 アプリケーションエラー

-DebugInf,-DebugInf,Trace,-DebugCompati,-DebugData,-TDInf,-CVInf,-DebugRangeオプションのどれも指定しないでコンパイルしたプログラムの実行でハードウェア例外やソフトウェア例外が発生した場合,OSがアプリケーションエラーのダイアログボックスを表示します。代表的なアプリケーションエラーと対処法を「表37‒3 代表的なアプリケーションエラー」に示します。

アプリケーションエラーが発生した場合は,次の手順で発生している例外種別および発生個所を調べてください。

  1. -DebugInfまたは-DebugInf,Traceオプションを指定して再度コンパイルと実行をする

  2. 異常終了時要約情報リストで発生している例外種別および発生個所を調べる

発生個所がCALL文を指している場合は,その呼び出し先プログラムも調査の対象としてください。

表37‒3 代表的なアプリケーションエラー

例外名称(例外コード)

意味と対処方法

アクセス違反

(0xc0000005)

(原因)アクセスが許されていないメモリに読み書きしようとした。

(対処)このエラーは主に次の要因で発生する。これに該当しないかを確認する。

  1. 呼び出し元プログラムと呼び出し先プログラムで,引数の属性,長さ,または数が一致していない

  2. 表操作で使用する添字または指標の値がOCCURSで定義した範囲を超えた

  3. 部分参照でデータ項目の領域を超えて参照した

  4. アドレス名に不正なアドレスが入っている状況で,ADDRESSED句付きで定義されたデータ名を参照した

  5. 可変長項目のDEPENDING ONに指定されたデータ項目に不当な値が入っている状態で,その可変長項目,またはその従属項目を参照した

1.〜3.の場合,-DebugRangeを指定してコンパイル・実行することで,そのエラーであることおよび発生個所を特定できる。

ゼロ除算

(0xc0000094)

(原因)ゼロで除算しようとした(被除数,除数ともに浮動小数点データでない場合)。

(対処)ゼロによる除算が発生しないようにプログラムを変更する。

スタックオーバフロー

(0xc00000fd)

(原因)プログラムが使用するスタックサイズが,プログラムで許されたスタックの上限を超えた。再帰属性プログラム,メソッド,および利用者定義関数で,次の場合に発生しやすくなる。

  • 局所場所節のデータ定義の合計サイズが大きい

  • 大量に再帰呼び出しがある

  • 連絡節のデータ定義の合計サイズが大きい

  • BY CONTENT,BY VALUEが仮定される関数の引数に大きなデータ項目がある

(対処)プログラムのスタックの上限は,-STACKオプションで変更できる。このオプションで変更してから再リンクして,スタックの上限を変更する。-STACKオプションについては,「38.1.3 オプション」を参照のこと。

COBOLプログラムが使用するスタック領域については,「31.3 COBOLプログラムが使用するスタック領域」を参照のこと。