FREEMEM |
Libérer la mémoire |
---|---|
Turbo Pascal 1+ | System |
Syntaxe
Procedure FreeMem(p:Pointer; t:Integer); | Version 3 |
Procedure FreeMem(p:Pointer; t:Word); | Version 4 à 7 |
Paramètres
Nom | Description |
---|---|
p | Ce paramètre permet d'indiquer le pointeur contenant l'adresse de la mémoire ayant déjà été alloué |
t | Ce paramètre permet d'indiquer le taille du bloc de mémoire alloué dynamiquement |
Description
Cette procédure permet de libérer une partie de mémoire dynamique attribué dans la zone de mémoire de tas à l'aide de la procédure GetMem.
Remarques
- Le paramètre p est une variable de pointeur de tout type de pointeur précédemment attribué par la procédure GetMem ou à laquelle une instruction explicite a attribué une valeur explicite. Le paramètre t est une expression de type Word à partir de Turbo Pascal 4, spécifiant la taille en octets de la variable dynamique à supprimer, il doit correspondre exactement au nombre d'octets précédemment alloués à cette variable par GetMem. La procédure FreeMem détruit la variable référencée par p et renvoie sa zone mémoire au tas. Si p ne pointe pas vers une région de la mémoire dans le segment de mémoire, une erreur d'exécution se produit. Après un appel à FreeMem, la valeur de p devient indéfinie et il est erroné de faire ensuite référence à p^.
- La procédure Dispose et FreeMem ne peuvent pas être utilisés de manière interchangeable avec Mark et Release si certaines règles ne sont pas observées.
- Vous ne pouvez libérer qu'une seule fois le même bloc de mémoire, ainsi, si vous appelez deux fois de suite la procédure FreeMem avec le même pointeur, vous aurez un message d'erreur :
- FreeMem vs Dispose : La procédure FreeMem permet d'indiquer le nombre d'octets à libérer dans le bloc de mémoire dynamique, tandis que Dispose libérera le bloc de mémoire dynamique au complet. Par conséquent, la procédure FreeMem permet également de libérer qu'une partie d'un bloc de mémoire ayant été alloué trop grand la première fois lors de l'appel de la procédure GetMem.
Error 204 : Invalid pointer operation». |
Exemple
Voici quelques exemples typiques de l'utilisation de «FreeMem» en Turbo Pascal :
- Program FreeMemSamples;
-
- Type
- TLongInt=Array[0..1000] of LongInt;
-
- Var
- tableau1,tableau2:^TLongInt;
-
- BEGIN
- GetMem(tableau1,1000*sizeof(LongInt));
- GetMem(tableau2,1000*sizeof(LongInt));
- If tableau1 <> NIL Then Begin
- WriteLn('Libère le tableau1');
- FreeMem(tableau1,1000*sizeof(LongInt));
- End;
- If tableau2 <> NIL Then Begin
- WriteLn('Libère le tableau2');
- FreeMem(tableau2,1000*sizeof(LongInt));
- End;
- END.
on obtiendra le résultat suivant s'il y a assez de mémoire disponible :
Libère le tableau1Libère le tableau2
Référence
Aide-mémoire de Turbo Pascal versions de 3 à 6, Edition Marabout, De Groote, Virga, 1992, ISBN: 2-501-01833-8, page 189.
Le grand livre du Turbo & Borland Pascal 7.0, Edition Micro Application, Reiner Scholles, 1993, ISBN: 2-86899-873-9, page 1236.
Dernière mise à jour : Dimanche, le 25 janvier 2015