ReAllocateMemory()

Syntax

*NeueMemoryID = ReAllocateMemory(*MemoryID, Größe [, Flags])
Beschreibung
Verändert den angegebenen Speicherpuffer auf eine neue Größe. Der Speicher kann in diesem Prozess an eine neue Stelle kopiert werden, wenn an seinem alten Platz nicht genügend Speicher verfügbar ist.

Parameter

*MemoryID Die Adresse des Speicherbereichs, der in der Größe verändert werden soll. Dieser Wert muss das Ergebnis eines Aufrufs von AllocateMemory() bzw. ReAllocateMemory() sein.

Wenn dieser Parameter #Null lautet, dann verhält sich dieser Befehl wie AllocateMemory() und reserviert einen neuen Speicherbereich in der angegebenen Größe.
Größe Die Größe (in Bytes) für den in der Größe veränderten oder neu reservierten Puffer.
Flags (optional) Dies kann einer der folgenden Werte sein:
  #PB_Memory_NoClear: füllt den erweiterten Speicherbereich nicht mit Nullen. Dies kann für eine schnellere Allokation
                      sorgen, wenn der erweiterte Speicher sofort verwendet wird. Wenn der Speicherbereich verkleinert
                      wird, dann hat dieses Flag keinen Effekt.

Rückgabewert

Gibt die neue Adresse des Speicherbereichs zurück, wenn dieser in der Größe verändert werden konnte. In diesem Fall kann die alte '*MemoryID' Adresse nicht länger verwendet werden. Wenn die Größenänderung des Speicherbereichs fehlgeschlagen ist (weil nicht genug Speicher verfügbar ist), ist das Ergebnis gleich Null, und die '*MemoryID' Adresse ist weiterhin gültig mit dem existierenden Speicherbereich und der alten Größe.

Anmerkungen

Wenn die Größe des Speicherbereichs erhöht wird, werden alle neuen Bytes anfänglich mit Nullen gefüllt, außer das #PB_Memory_NoClear Flag wird angegeben.

Wenn das Programm bei diesem Befehl abstürzt, auch wenn die Eingabe korrekt erscheint, ist dies üblicherweise das Ergebnis eines Speicherfehlers zu einem früheren Zeitpunkt im Programm, bei dem in einen Bereich außerhalb des reservierten Speicherbereichs geschrieben wurde. Ein solcher Fehler kann mit Hilfe des Purifier Debugger-Tools bis auf die eigentliche Ursache eingegrenzt werden.

Alle verbliebenen reservierten Speicherbereiche werden am Programmende automatisch freigegeben.

Beispiel

  *MemoryID = AllocateMemory(1000)
  PokeS(*MemoryID, "Speichere diesen String")
  ; hier kann noch mehr mit dem Speicherbereich gemacht werden...
  ;
  *NewMemoryID = ReAllocateMemory(*MemoryID, 2000) ; wir brauchen mehr Speicher
  If *NewMemoryID
    ; arbeitet jetzt mit *NewMemoryID mit einer Größe von 2000 Byte
    Debug "Der alte Inhalt ist noch vorhanden:"
    Debug PeekS(*NewMemoryID)
    ;
    FreeMemory(*NewMemoryID) 
  Else
    ; die Größenänderung schlug fehl, wir arbeiten weiter mit *MemoryID (Größe 1000)
    ;
    FreeMemory(*MemoryID)
  EndIf

Siehe auch

AllocateMemory(), FreeMemory(), MemorySize()

Unterstützte OS

Alle

<- PokeW() - Memory Inhaltsverzeichnis