Funktion
Die ALLOCATE-Anweisung weist dynamischen Speicher zu.
Format 1 | Wird Speicher für eine Datenbeschreibung (datenname-1) angefordert, für die die BASED-Klausel spezifiziert ist, so wird dieser Datenbeschreibung die Adresse des angeforderten Speichers zugeordnet. |
Format 2 | Wird Speicher als eine Anzahl von Zeichen angefordert, wird die Adresse des zugewiesenen Speichers im Datenzeiger bezeichner-2 zurückgegeben. |
Format 1
ALLOCATE datenname-1
[INITIALIZED] [RETURNING bezeichner-2]
Syntaxregeln
datenname-1 muss ein Datenelement sein, das mit der BASED-Klausel spezifiziert ist.
Ist bezeichner-2 ein typbezogener Datenzeiger, so muss datenname-1 ebenfalls typisiert sein und die zugehörigen Typen müssen übereinstimmen.
Ist datenname-1 stark typisiert, so muss auch bezeichner-2 ein typbezogener Zeiger sein, dem der gleiche Typ zugeordnet ist wie datenname-1.
bezeichner-2 muss ein Datenelement der Kategorie datenzeiger referenzieren.
Format 2
ALLOCATE arithmetischer-ausdruck CHARACTERS
[INITIALIZED] RETURNING bezeichner-2
Syntaxregeln
bezeichner-2 darf kein typbezogener Datenzeiger sein.
bezeichner-2 muss ein Datenelement der Kategorie datenzeiger referenzieren.
Allgemeine Regeln für beide Formate
arithmetischer-ausdruck legt die Anzahl von Bytes im Speicher fest, die angefordert werden. Das Resultat der Auswertung von arithmetischer-ausdruck wird in einem internen Datenfeld abgelegt, das mit
PIC S9(9) BINARY
definiert ist.Ist das Resultat der Auswertung kleiner oder gleich NULL wird kein Speicher angefordert und bezeichner-2 enthält den vordefinierten Wert NULL.
Bei Format 1 richtet sich die Größe des angeforderten Speichers danach, wieviel Platz für eine Datenbeschreibung datenname-1 benötigt wird. Wenn eine Datenbeschreibung, die zu datenname-1 untergeordnet ist, eine OCCURS DEPENDING-Klausel enthält, wird die maximale Länge des Datensatzes angefordert.
Ist der angeforderte Speicherplatz verfügbar, so wird er zugewiesen. Bei Format 1 wird die Adresse von datenname-1 auf die Adresse des zugewiesenen Speichers gesetzt. Der Datenzeiger bezeichner-2 aus der RETURNING-Angabe wird auf die Adresse des zugewiesenen Speichers gesetzt.
Ist der angeforderte Speicherplatz nicht verfügbar, wird die Adresse von datenname-1 und/oder der Datenzeiger bezeichner-2 aus der RETURNING-Angabe auf NULL gesetzt. Es entsteht die Ausnahmesituation EC-STORAGE-NOT-AVAIL. Ist die Überprüfung für EC-STORAGE-NOT-AVAIL eingeschaltet, so wird der zugehörige Ausnahmezustand ausgelöst und in die entsprechende USE-Prozedur verzweigt. Nach Rücksprung aus der USE-Prozedur wird bei der auf die ALLOCATE-Anweisung folgende ausführbaren Anweisung fortgesetzt.
Die INITIALIZED-Angabe bei Format 1 bewirkt, dass für datenname-1 eine INITIALIZE-Anweisung INITIALIZE datenname-1 WITH FILLER ALL TO VALUE THEN TO DEFAULT ausgeführt wird.
Fehlt die INITIALIZED-Angabe bei Format 1, so wird eine INITIALIZE-Anweisung INITIALIZE datenname-1 WITH FILLER REPLACING DATA-POINTER BY NULL, PROGRAM-POINTER BY NULL, OBJECT-REFERENCE BY NULL ausgeführt.
Die INITIALIZED-Angabe bei Format 2 bewirkt, dass der zugewiesene Speicher mit binären NULLEN initialisiert wird.
Fehlt die INITIALIZED-Angabe bei Format 2, ist der Inhalt des zugewiesenen Speichers undefiniert.
Der Speicher bleibt zugewiesen, bis er entweder explizit mit einer FREE-Anweisung freigegeben wird oder der Programmlauf beendet wird.