暗黙的な再定義によるポインタの変更

制限事項: このトピックは UNIX 環境にのみ適用されます。

demo1.cbl は短い COBOL プログラムで、表題のようなポインタ操作を含んでいます。

  1. 中間コード・ファイルを作成します。 Windows:
    cobol demo1.cbl /anim /nognt;
    UNIX:
    cob demo1.cbl
  2. 次のコマンドを入力して、このプログラムで Scan64 を実行します。Windows:
    cblscan64 demo1
    UNIX:
    cobscan64 demo1
    これにより次のレポートが生成されます。
    Processing file 'demo1.int' 
    **Unsafe modification of pointer at (file: demo1.cbl, line: 9) 
      Pointer : PP (file: demo1.cbl, def: 6)
    
    Finished file 'demo1.int' - pointer problems could exist

demo1.cbl のソースを確認します。プログラムの行 9 には次が含まれています。

move low-values to ppg

このような、ポインタ pp を含んでいるグループ項目の変更は、ポインタ pp によって占有されているメモリが英数文字データ項目として扱われるので危険です。この場合、LOW-VALUE が移動されるので、変更は必要ありません。ただし、行 9 でコードを次のように変更するのが望ましい方法です。

set pp to null 

COBOL では、ポインタが変更された位置を特定するのが難しい場合があります。Scan64 -m オプションを使用することで、ポインタを変更したコードを特定しやすくなります。

次に例を示します。

Windows:
cblscan64 -m demo1
UNIX:
cobscan64 -m demo1

上記により、次の内容が生成されます。

Processing file 'demo1.int' 
**Unsafe modification of pointer at (file: demo1.cbl, line: 9)
  Modifier : PPG (file: demo1.cbl, def: 5)
  Pointer : PP (file: demo1.cbl, def: 6)
  Finished file 'demo1.int' - pointer problems could exist