無効な部分参照

部分参照を使用すると、指定されたデータ項目外のメモリ領域を容易に参照できます。ただし、無効な部分参照は、プログラムがアクセスしているメモリ領域の位置によって次のような結果につながります。

下の例では、部分参照によって、実行時に RTS エラー 114 (「メモリの境界を超えて項目にアクセスしようとしています」) が発生します。原因は、a を最大長 b よりも大きい値に設定したためです。部分参照項目は、最初にソース フィールドで使用されるため、c に無効なデータが渡されます。このような問題は、この COBOL システムで検出できます。部分参照項目が 2 回目に使用される場所はターゲット フィールドであるため、さらに危険な結果を招く可能性があります。ここでも、この問題は COBOL システムによって検出され、RTS エラー 114 (「メモリの境界を超えて項目にアクセスしようとしています」) が生成されます。この後の項でもこの例を使用して、さまざまな環境でこのプログラムをデバッグする方法について説明します。

 program-id. "buggy".
 working-storage section.
 01 a pic 9(6).
 procedure division.
     move 999999 to a
     call "bug" using a
     stop run.
 end program "buggy".

 program-id. "bug".
 working-storage section.
 01 b pic x(20).
 01 c pic x.
 linkage section.
 01 a pic 9(6).
 procedure division using a.
     move b(a:1) to c
     move "1" to b(a:1)
 exit program.