The ALLOCATE statement allocates dynamic storage.
General Format
General Rules
- If data-name-1 is specified:
- the amount of storage to be allocated is the number of bytes required to hold data-name-1. If the data description entry for data-name-1 contains a sub-ordinate item containing an OCCURS DEPENDING ON clause, the maximum length of the record is allocated.
- the address of the data item is set to the address of the obtained storage, to the same effect as
SET ADDRESS OF data-name-1 TO address.
- the RETURNING phrase can be omitted, but if specified, data-name-2 will contain that address.
- If arithmetic-expression-1 CHARACTERS is specified:
- arithmetic-expression-1 specifies the number of bytes of storage to allocate.
- the RETURNING data-item-2 must be specified, and will be set to the address of the obtained storage.
- If the INITIALIZED phrase is specified, the allocated storage is initialized; If it is omitted, the contents of the allocated storage is undefined.
- If arithmetic-expression-1 and the INITIALIZED phrase are both specified, all storage bytes are initialized to binary zeroes.
- If data-name-1 and the INITIALIZED phrase are both specified, the storage is initialized to the same effect as:
INITIALIZE data-name-1 WITH FILLER ALL TO VALUE THEN TO DEFAULT.
- If the specified amount of storage is available for allocation:
- If the RETURNING phrase is specified, the data item referenced by data-name-2 is set to the address of that storage.
- If data-name-1 is specified, the address of the 01 or 77 LINKAGE SECTION data item referenced by data-name-1 is set to the address of that storage, to the same effect as:
SET ADDRESS OF data-name-1 TO address-of-obtained-storage.
- If the specified amount of storage is not available for allocation:
- If the RETURNING phrase is specified, the data item referenced by data-name-2 is set to the predefined address NULL.
- If data-name-1 is specified, the address of the 01 or 77 LINKAGE SECTION data item referenced by data-name-1 is set to the predefined address NULL.
- The allocated storage persists until explicitly released using the FREE statement or the run unit is terminated, whichever occurs first.
Syntax Rules
- data-name-1 must be a level-01 or level-77 item defined in the Linkage Section.
- data-name-1 must not be:
- reference modified.
- a group item that contains an unbounded table.
- data-name-2 must be defined as USAGE IS POINTER.
- data-name-2 can be qualified or subscripted.
- If arithmetic-expression-1 does not equate to an integer, the result is rounded up to the next whole number.
- If arithmetic-expression-1 equates to zero or a negative value, data-name-2 is set to the predefined address NULL.