DEALLOCATE 文がその時点で割り付けられていない配列を宣言していると,エラーが発生します。
TARGET 属性を持つ割付け配列が割付け解除されると,それに結合されているすべてのポインタの割付け状態は不定となります。
RETURN または END 文が手続を終了させた場合,割付け配列の割付け状態は以下のいずれかになります。
以下の条件が満たされていれば,以前の割付けおよび結合状態が保たれます。
SAVE 属性を持っている。
現在実行中の他の有効域から参照できるモジュールの有効域中にある。
親子結合によって参照できる。
参照結合によって参照されている場合,割り付けられたままになります。
それ以外の場合,割付け状態は割付け解除となります。
ALLOCATED 組込み関数を使うと,割付け配列が割り付けられているかどうかを調べることができます。
SUBROUTINE TEST REAL, ALLOCATABLE, SAVE :: F(:,:) REAL, ALLOCATABLE :: E(:,:,:) ... IF (.NOT. ALLOCATED(E)) ALLOCATE(E(2:4,7,14)) END SUBROUTINE TEST
F は SAVE 属性を持っているので,サブルーチン TEST が終了したときに,F の割付け状態は保たれます。E は SAVE 属性を持っていないので,割付け解除されます。TEST が次に呼び出されると,E の状態は「割り付けられていない」となります。
関連情報