Provides storage
space for allocatable arrays and pointer targets.
Syntax
ALLOCATE (allocation-list[, STAT= scalar-integer-variable]) |
 |
- allocation-list
is a comma-separated list of allocation.
- allocation
is allocate-object [(allocate-shape-spec-list)].
- allocate-object
is variable-name or derived-type-component. Each allocate-object must be an allocatable array or a pointer.
- allocate-shape-spec-list
is a comma-separated list of allocate-shape-spec.
- allocate-shape-spec
is [lower-bound:]upper-bound. The bounds in an allocate-shape-spec must be scalar integer expressions.
- STAT=scalar-integer-variable
returns the
error status after the statement executes. If given, it is set to zero
if the statement successfully executed, and to one of the following nonzero
values if an error occurred:
- 1
Error occurred after the array was allocated; for
example, an attempt to allocate a previously allocated array.
- 2
Dynamic memory allocation failure (memory not available)
or invalid size (array too large).
- 3
Errors of both types 1 and 2 have occurred. This
kind of an error can only occur if the same ALLOCATE statement is used
to allocate more than one array, and both kinds of errors occur.
If there is no scalar-integer-variable, the occurrence of an error causes the program to
terminate.
Description
The ALLOCATE statement creates space for allocatable arrays
and targets for variables (scalars or arrays) with the POINTER attribute. The ALLOCATE and DEALLOCATE statements give the user the ability to manage
space dynamically at execution time.
For allocatable arrays, an error occurs when an attempt is
made to allocate an already allocated array or to deallocate an
array that is not allocated. The ALLOCATED intrinsic function may be used to determine whether
an allocatable array is allocated.
A pointer can be associated with a target, either with the
pointer assignment statement or by use of the ALLOCATE statement. It is not an error to allocate an already
associated pointer; its old target connection is replaced by a connection
to the newly allocated space. However, if the previous target was
allocated and no other pointer became associated with it, the space
is no longer accessible.
Examples
In the following example, a complex array with the POINTER attribute is declared. Target space is allocated
to it at run-time, the amount being determined by two integer values
read in. Later in the program, the space is recovered by use of
the DEALLOCATE statement.
COMPLEX, POINTER :: hermitian (:, :) READ *, m, n ALLOCATE (hermitian (m, n)) DEALLOCATE (hermitian, STAT = ierr) |
In the next example, a real allocatable array is declared.
The amount of space allocated to it depends on how much is available.
! Rank-2 allocatable array REAL, ALLOCATABLE :: intense(:,:) CALL init_i_j(i, j) DO ALLOCATE (intense(i, j), STAT = ierr4) ! ierr4 will be positive if there is not enough space to ! allocate this array IF (ierr4 == 0) EXIT i = i/2; j = j/2 END DO |
The derived type node in the next example is the basis of a binary tree
structure. It consists of a real value component (val) and two pointer components, left and right, both of type node. The variable top (of type node) is declared, and space is allocated for targets
for the pointers top%left and top%right.
The ALLOCATE and DEALLOCATE statements and pointer variables of type node make it possible to allocate space for nodes in
such a tree structure, traverse it as required, and then recover
the space when it is no longer needed.
TYPE node REAL val TYPE(node), POINTER :: left, right ! Pointer components END TYPE node TYPE(node) top ALLOCATE (top % left, top % right) |
In the final example, two CHARACTER arrays, para and key, are declared with the POINTER attribute. para is allocated space; key is made to point at a section of para.
! Pointers to char arrays CHARACTER, POINTER :: para(:), key(:) CALL init_k_m(k, m) ALLOCATE (para(1000)) key => para (k : k + m) |
Related statements
ALLOCATABLE (statement and attribute), DEALLOCATE, NULLIFY, and POINTER (statement and attribute)
Related concepts
For related information, see the following: