目的
ALLOCATE ステートメントは、ポインター・ターゲットと割り振り可能オブジェクトにストレージを動的に提供します。
構文
>>-ALLOCATE--(--allocation_list--+-----------------------------+--)->< '-,--STAT-- = --stat_variable-' |
allocation_list
>>-allocate_object--+-------------------------------------------+->< | .-,-------------------------------. | | V | | '-(----+----------------+--upper_bound-+--)-' '-lower_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 の両方のエラーが発生した |
+--------------------------------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
関連情報