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