目的
DEALLOCATE ステートメントは、割り振り可能オブジェクトと ポインター・ターゲットを動的に割り振り解除します。 ターゲットと関連する他のポインターが未定義である場合、指定したポインター との関連は解除されます。
構文
>>-DEALLOCATE--(--allocate_object_list--+-----------------------------+--)->< '-,--STAT-- = --stat_variable-' |
規則
DEALLOCATE ステートメント内の割り振り可能オブジェクトは、現在割り振り済みでなければなりません。 関連するポインターを介して、TARGET 属性を持つ 割り振り可能オブジェクトの割り振りを解除することはできません。 そのようなオブジェクトの割り振りを解除すると、関連するポインターの関連付け状況は 未定義になります。 未定義の割り振り状況を持つ割り振り可能オブジェクトに対して、 その時点で、参照、定義、割り振り、または割り振り解除を行うことはできません。 DEALLOCATE ステートメントが正常に実行されると、 割り振り可能オブジェクトの割り振り状況は、割り振られていないという状況になります。
派生型の変数が割り振り解除されると、ALLOCATABLE
属性によって割り振られたすべてのサブオブジェクトも割り振り解除されます。
組み込み割り当てステートメントが実行されると、 割り当てが行われる前に、変数の割り振り済みサブオブジェクトの割り振りが解除されます。
DEALLOCATE ステートメント内のポインターは、ALLOCATE ステートメントで作成されたターゲット全体と関連を持たなければなりません。 ポインター・ターゲットの割り振りを解除すると、ターゲット全体あるいは 一部と関連を持つ他のポインター関連付け状況は未定義になります。
ヒント |
---|
割り振り済みメモリーに関連した他のポインターがない場合、NULLIFY ステートメントの代わりに DEALLOCATE ステートメントを使用してください。 ポインター関数が割り振られたメモリーの割り振りを解除してください。 |
STAT= 指定子を指定せず、このステートメントの実行中にエラー状態が発生した場合、プログラムは終了します。 STAT= 指定子が存在する場合、stat_variable には 以下の値の 1 つが割り当てられます。
+----------------------------------IBM 拡張----------------------------------+
Stat 値 | エラー状態 |
---|---|
0 | エラーなし |
1 | 割り振り解除を試みているシステム・ルーチンにエラー |
2 | 割り振り解除に無効なデータ・オブジェクトが指定された |
3 | 1 と 2 の両方のエラーが発生した |
+------------------------------End of IBM 拡張-------------------------------+
allocate_object は、同じ DEALLOCATE ステートメント内の別の allocate_object の値、境界、割り振り状況、または関連付け状況に依存してはならず、また、同じ DEALLOCATE ステートメント内の stat_variable の値にも依存しません。
stat_variable は、同じ DEALLOCATE ステートメント内で割り振り解除してはなりません。 stat_variable は、同じ DEALLOCATE ステートメント内で、どの allocate_object の値、境界、割り振り状況、または関連付け状況にも依存してはなりません。
例
INTEGER, ALLOCATABLE :: A(:,:) INTEGER X,Y
·
·
·
ALLOCATE (A(X,Y))
·
·
·
DEALLOCATE (A,STAT=I) END
関連情報