DEALLOCATE
Purpose
The DEALLOCATE statement dynamically deallocates allocatable objects and pointer targets. A specified pointer becomes disassociated, while any other pointers associated with the target become undefined.
Syntax
- allocate_object
- is a data pointer or an allocatable object
- stat_variable
- is a scalar integer variable
errmsg_variable - is a scalar character variable

Rules
An allocatable object that appears in a DEALLOCATE statement must be allocated.
When the
result of a referenced function is allocatable, or has a structure with allocatable subobjects, that
result and any allocated allocatable subobjects are deallocated after execution of the innermost
executable construct containing the function reference.
An allocatable object with the TARGET attribute cannot be deallocated through an associated pointer. Deallocation of such an object causes the association status of any associated pointer to become undefined. An allocatable object that has an undefined allocation status cannot be subsequently referenced, defined, allocated, or deallocated. Successful execution of a DEALLOCATE statement causes the allocation status of an allocatable object to become not allocated.
An
object being deallocated will be finalized first. When a variable of derived type is deallocated,
any allocated subobject with the ALLOCATABLE attribute is also
deallocated. If an allocatable component is a subojbect of a finalizable object, that object is
finalized before the component is automatically deallocated.
When an intrinsic assignment statement is executed, any allocated subobject of the variable is deallocated before the assignment takes place.
A pointer that appears in a DEALLOCATE statement must be associated with a whole target that was created with an ALLOCATE statement. Deallocation of a pointer target causes the association status of any other pointer associated with all or part of the target to become undefined.
Deallocation of a variable containing allocatable components automatically deallocates all such components of the variable that are allocated.
Tips
Use the DEALLOCATE statement instead of the NULLIFY statement if no other pointer is associated with the allocated memory.
Deallocate memory that a pointer function has allocated.
If the STAT= specifier is not present and an error condition occurs during execution of the statement, the program terminates. If the STAT= specifier is present, stat_variable is assigned one of the following values:
| Stat value | Error condition |
|---|---|
| 0 | No error |
| 1 | Error in system routine attempting to do deallocation |
| 2 | An invalid data object has been specified for deallocation |
| 3 | Both error conditions 1 and 2 have occurred |

If an error condition occurs during execution of the DEALLOCATE
statement, an explanatory message is assigned to errmsg_variable. If no
such condition occurs, the value of errmsg_variable is not changed.
An allocate_object must not depend on the value, bounds, allocation
status, or association status of another allocate_object in the same
DEALLOCATE statement; nor does it depend on the value of the
stat_variable
or
errmsg_variable
in the same
DEALLOCATE statement.
stat_variable and errmsg_variable must not be deallocated within the same DEALLOCATE statement. The variable must not depend on the value, bounds, allocation status, or association status of any allocate_object in the same DEALLOCATE statement.
Examples
INTEGER, ALLOCATABLE :: A(:,:)
INTEGER X,Y
.
.
.
ALLOCATE (A(X,Y))
.
.
.
DEALLOCATE (A,STAT=I)
END
