ALLOCATE

目的

ALLOCATE ステートメントは、ポインター・ターゲットと 割り振り可能オブジェクトにストレージを動的に提供します。

構文



>>-ALLOCATE--(--allocation_list--+-----------------------------+--)-><
                                 '-,--STAT-- = --stat_variable-'
 
 

stat_variable
スカラー整変数です。

allocation



>>-allocate_object--+-------------------------------------------+-><
                    |    .-,-------------------------------.    |
                    |    V                                 |    |
                    '-(----+----------------+--upper_bound-+--)-'
                           '-lower_bound--:-'
 
 

allocate_object
変数名あるいは構造体コンポーネントです。 これはポインターまたは割り振り可能オブジェクトでなければなりません。

lower_bound、upper_bound
スカラー整数式です。

規則

ポインターに対して ALLOCATE ステートメントを実行すると、 ポインターは、割り振られたターゲットと関連させられます。 割り振り可能オブジェクトに対して実行すると、 オブジェクトは定義可能になります。

指定する次元の数 (つまり allocation 内の上限の境界の 数) は、allocate_object のランクと等しくなければなりません。 ALLOCATE ステートメントが配列に対して実行された場合、 境界の値はその時点で決定されます。 境界式の中でそれに続くエンティティーの再定義や未定義は配列指定 には影響しません。 下限値が省略された場合は、デフォルトの値 1 が割り当てられます。 下限値が上限値を超えた場合、次元のエクステントは 0 になり、allocate_object の サイズも 0 になります。

allocate_object、または allocate_object の指定された境界は、stat_variable の値、または同じ ALLOCATE ステートメント内にある allocate_object の 値、境界、割り振り状況、または関連付け状況のいずれにも依存しません。

stat_variable は、それが現れる ALLOCATE ステートメントの中に 割り振られません。また、同じ ALLOCATE ステートメント内にある allocate_object の 値、境界、割り振り状況、または関連付け状況に依存しません。

STAT= 指定子を指定せず、このステートメントの実行中にエラー状態が発生した場合、プログラムは終了します。 STAT= 指定子が存在する場合、stat_variable には、 以下の値の 1 つが割り当てられます。

+----------------------------------IBM 拡張----------------------------------+


Stat 値 エラー状態
0 エラーなし
1 割り振りを試みているシステム・ルーチンにエラー
2 割り振りに無効なデータ・オブジェクトが指定された
3 1 と 2 の両方のエラーが発生した

+------------------------------End of IBM 拡張-------------------------------+

すでに割り振り済みの割り振り可能オブジェクトを割り振ると、ALLOCATE ステートメントでエラー状態が 発生します。

ポインター割り振りは、TARGET 属性を持つオブジェクトを作成します。 ポインター指定を実行することによって、追加のポインターをこの ターゲット (またはターゲットのサブオブジェクト) に関連付けることができます。 すでにターゲットに関連したポインターを再度割り振ると、 以下のようになります。

派生型のオブジェクトが ALLOCATE ステートメントによって作成されると、 割り振り可能最終コンポーネントの割り振り状況は、現在割り振られていない状況になります。

割り振り可能オブジェクトが現在割り振られているかどうかを 判別するには、ALLOCATED 組み込み関数を使用します。 ポインターの関連付け状況、およびポインターが現在指定しているターゲットに 関連付けられているかどうかを調べるには、ASSOCIATED 組み込み関数 を使用します。

CHARACTER, POINTER :: P(:,:)
CHARACTER, TARGET :: C(4,4)
INTEGER, ALLOCATABLE, DIMENSION(:) :: A
P => C
N = 2; M = N
ALLOCATE (P(N,M),STAT=I)         ! P is no longer associated with C
N = 3                            ! Target array for P maintains 2X2 shape
IF (.NOT.ALLOCATED(A)) ALLOCATE (A(N**2))
END

関連情報

IBM Copyright 2003