# 5.2 ALLOCATABLE Attribute and Statement

The ALLOCATABLE attribute specifies that an array is an allocatable array with a deferred shape. The shape of an allocatable array is determined when an ALLOCATE statement is executed, dynamically allocating space for the array.

The ALLOCATABLE attribute can be specified in a type declaration statement or an ALLOCATABLE statement, and takes one of the following forms:

Type Declaration Statement:

  type, [att-ls,] ALLOCATABLE [, att-ls] :: a[(d-spec)] [, a[(d-spec)]]...

Statement:

  ALLOCATABLE [::] a[(d-spec)] [, a[(d-spec)]]...
  type
  Is a data type specifier.
  att-ls
  Is an optional list of attribute specifiers.
  a
  Is the name of the allocatable array; it must not be a dummy argument or function result.
  d-spec
  Is a deferred-shape specification (: [, :]...). Each colon represents a dimension of the array.

Rules and Behavior

If the array is given the DIMENSION attribute elsewhere in the program, it must be declared as a deferred-shape array.

When the allocatable array is no longer needed, it can be deallocated by execution of a DEALLOCATE statement.

An allocatable array cannot be specified in a COMMON, EQUIVALENCE, DATA, or NAMELIST statement.

Allocatable arrays are not saved by default. If you want to retain the values of an allocatable array across procedure calls, you must specify the SAVE attribute for the array.

Examples

The following example shows a type declaration statement specifying the ALLOCATABLE attribute:

    REAL, ALLOCATABLE :: Z(:, :, :)

The following is an example of the ALLOCATABLE statement:

    REAL A, B(:)
    ALLOCATABLE :: A(:,:), B

For More Information:

- On type declaration statements, see Section 5.1.
- On the ALLOCATE statement, see Section 6.1.
- On the DEALLOCATE statement, see Section 6.2.
- On allocation status, see Section 6.1.1.
- On compatible attributes, see Table 5-1.

Previous Page Next Page Table of Contents