Libére l'espace pointé pascal/delphi
Résolu
fahim0788
Messages postés
111
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
comment faire en pascal ou delphi pour libérer l'espace mémoire pointé par un pointeur?
comment faire en pascal ou delphi pour libérer l'espace mémoire pointé par un pointeur?
Configuration: Windows XP Internet Explorer 7.0
3 réponses
-
En Pascal :
new(p); pour demander de la mémoire
dispose(p); pour libérer la mémoire -
Pour tes soucis de pile (gestion de la mémoire aujourd'hui, taille d'une pile hier...)
Voici une unité Pascal contenant quelques fonctions fondamentales sur les piles
J'espère que ça pourra t'aider (en cas de bug sue une fonction, merci de m'en informer)unit UnitePile; interface type Elem=integer; // par exemple Pile=^Niveau; Niveau=record e:elem; p:pile; end; procedure Decapiter(var p:Pile); // supprime le sommet de la pile procedure Supprimer(var p:Pile); // supprime toute la pile procedure Initialiser(var p:Pile); // associe à p une base de pile procedure Empiler(var p:Pile;e:Elem); // rajoute "e" au sommet de la pile procedure Depiler(var p:Pile;var e:Elem); // extrait le sommet de la pile function Sommet(p:Pile):Elem; // accède à l'élément du sommet function TaillePile(p:Pile):integer; // donne le nombre d'élément empilé implementation const ElemZero=0; // dépend de Elem, utilisé dans Initialiser procedure Decapiter(var p:Pile); var q:Pile; begin if p<>nil then begin q:=(p^).p; dispose(p); p:=q; end; end; procedure Supprimer(var p:Pile); begin if p<>nil then begin Decapiter(p); Supprimer(p); end; end; procedure Initialiser(var p:Pile); begin Supprimer(p); // nécessite que p ai déjà été affecté (nil par exemple) new(p); (p^).p:=nil; (p^).e:=ElemZero; end; procedure Empiler(var p:Pile;e:Elem); var q:Pile; begin q:=p; new(p); (p^).e:=e; (p^).p:=q; end; function Sommet(p:Pile):Elem; begin result:=(p^).e; end; procedure Depiler(var p:Pile;var e:Elem); begin e:=Sommet(p); Decapiter(p); end; function TaillePile(p:Pile):integer; begin if p=nil then result:=0 else result:=TaillePile((p^).p)+1; end; begin end.Un programme type avec une pile sera donc :program SansNom; uses UnitePile; var p:Pile; begin p:=nil; Initialiser(p); //... Supprimer(p); end.
-
J'avais initialement compilé mon unité sous Dev-Pascal 1.9.2, mais je l'ai récemment compilé sous Delphi 6 et je me suis aperçu qu'il ne compilait pas donc j'ai rectifié :
procedure Initialiser(var p:Pile); begin Supprimer(p); // bah oui, en fait Initialiser(p) sert à rien... désolé ! end; procedure Empiler(var p:Pile;e:Elem); var n:niveau; begin n.e:=e; n.p:=p; p^:=n; end;
-
-
c'est exactement ce que j'ai besoin pour ajouter des piles au programme, merci pour votre aide.