ReAllocateMemory()

Syntaxe

*Resultat = ReAllocateMemory(*Memoire, Taille [, Options])
Description
Redimensionne une zone mémoire.

Arguments

*Memoire L'adresse de la zone mémoire à redimensionner.
Cette valeur doit être le résultat d'un appel à AllocateMemory() ou à ReAllocateMemory().

Si ce paramètre est #Null, la commande agit comme AllocateMemory() et alloue une zone mémoire mais avec la nouvelle dimension.
Taille La nouvelle taille en octets.
Options (optionnel)
  #PB_Memory_NoClear: Ne remplit pas la zone mémoire étendue avec des zéros. Cela peut aider à l'avoir plus rapidement si la mémoire 
                      étendue est utilisée immédiatement. Si la mémoire est rétrécie, cette option n'a aucun effet.

Valeur de retour

Renvoie la nouvelle adresse de la zone mémoire si elle peut être redimensionnée. Dans ce cas, l'ancienne adresse '*MemoireID' ne peut plus être utilisée. Si le redimensionnement a échoué (car il n'y a pas assez de mémoire disponible), le résultat est égal à zéro et le '*Memoire' est toujours valide avec la zone de mémoire existante et l'ancienne taille.

Remarques

Si la taille de la zone de mémoire est augmentée, les nouveaux octets sont tout d'abord remplis de zéros à moins que #PB_Memory_NoClear ne soit indiqué.

Si le programme se bloque à cette commande, même si l'entrée semble correcte, c'est généralement le résultat d'une altération de la mémoire qui s'est produite antérieurement dans le programme par l'écriture dans une zone à l'extérieur de la zone de mémoire allouée. Il est possible de trouver la cause de ce genre d'erreur en utilisant le purificateur

Tous les blocs de mémoire alloués restants sont automatiquement libérés lorsque le programme se termine.

Exemple

  *MemoireID = AllocateMemory(1000)
  PokeS(*MemoireID, "Stocke cette chaîne")
  ; faire quelque chose en plus avec ça ici...
  ;
  *NouvelleMemoireID = ReAllocateMemory(*MemoireID, 2000) ; besoin de plus de mémoire
  If *NouvelleMemoireID
    ; maintenant travailler avec *NouvelleMemoireID avec une taille de 2000 octets
    Debug "L'ancien contenu est toujours là :"
    Debug PeekS(*NouvelleMemoireID)
    ;
    FreeMemory(*NouvelleMemoireID)
  Else
    ; le redimensionnement a échoué, continuons de travailler avec *MemoireID (de taille 1000 octets)
    ;
    FreeMemory(*MemoireID)
  EndIf

Voir aussi

AllocateMemory(), FreeMemory(), MemorySize()

OS Supportés

Tous

<- PokeW() - Memory Index