Referenz - REALLOCATE
Syntax: REALLOCATE (Pointer, Bytes)
Typ: Funktion
Kategorie: Speicher
REALLOCATE ändert die Größe eines reservierten Speicherbereichs.
- 'Pointer' ist ein Pointer auf einen bereits bestehenden Speicherbereich, dessen Größe geändert werden soll. Ist 'Pointer' 0, so verhält sich REALLOCATE exakt wie ALLOCATE.
- 'Bytes' ist die neue Größe des Speicherbereichs in Bytes.
- Die Werte, die im Speicherbereich 'Pointer' gespeichert sind, werden bei der Redimensionierung zwischengespeichert.
- Der Rückgabewert ist ein Pointer auf das erste Byte des redimensionierten Speicherbereichs. Er kann im selben Pointer gespeichert werden, der schon bei 'Pointer' angegeben wurde, darf (und sollte!) aber in einer anderen Pointer-Variablen gespeichert werden. Die Adresse des redimensionierten Speicherbereichs kann sich von der Adresse unterscheiden, auf die 'Pointer' zeigt.
- Wenn die Redimensionierung fehlschlägt, ist der Rückgabewert 0.
REALLOCATE ist kein Teil der FreeBASIC Runtime Library, sondern ein Alias von realloc der C-Lib.
Achtung: Es kann nicht garantiert werden, dass diese Funktion auf allen Plattformen Multithreading unterstützt, d.h. thread-safe ist. Unter Windows und Linux sind aktuell durch die verwendeten Implementationen der Betriebssysteme aber keine Probleme zu erwarten.
Beispiel:
DIM a AS INTEGER PTR, b AS INTEGER PTR, i AS INTEGER
a = ALLOCATE(5 * LEN(INTEGER)) ' Speicher für fünf INTEGER-Stellen reservieren
FOR i = 0 TO 4
a[i] = (i + 1) * 2 ' Werte in den Speicher schreiben
NEXT i
b = REALLOCATE( a, 10 * LEN(INTEGER) ) ' Speicher für fünf zusätzliche Werte reservieren
FOR i = 5 TO 9
b[i] = (i + 1) * 2 ' Zusätzliche Werte in den Puffer schreiben
NEXT i
FOR i = 0 TO 9 ' Werte ausgeben
PRINT b[i];
NEXT i
DEALLOCATE b ' Speicher freigeben
SLEEP ' Auf Tastendruck warten
Hinweis:
Wenn Speicher mit REALLOCATE vergrößert wird, ist beim Umgang mit STRINGs auf das gleiche Verhalten wie bei ALLOCATE zu achten. Der neue Speicherbereich wird nicht mit Nullen überschrieben, sodass Probleme auftreten können. Um dem entgegenzuwirken kann der neu reservierte Speicherbereich etwa mit CLEAR auf null gesetzt werden.
Unterschiede zu QB: neu in FreeBASIC
Plattformbedingte Unterschiede:
Es kann nicht garantiert werden, dass die Prozedur auf allen Plattformen thread-safe ist.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht REALLOCATE nicht zur Verfügung und kann nur über __REALLOCATE aufgerufen werden.
Siehe auch:
ALLOCATE, CALLOCATE, DEALLOCATE, Pointer, Speicher
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|