Libére l'espace pointé pascal/delphi

Résolu/Fermé
fahim0788 Messages postés 111 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 19 décembre 2011 - 4 juil. 2008 à 15:27
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 7 juil. 2008 à 08:30
Bonjour,
comment faire en pascal ou delphi pour libérer l'espace mémoire pointé par un pointeur?
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 juil. 2008 à 22:11
En Pascal :
new(p); pour demander de la mémoire
dispose(p); pour libérer la mémoire
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 juil. 2008 à 22:47
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.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 juil. 2008 à 08:30
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;
0
fahim0788 Messages postés 111 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 19 décembre 2011 10
6 juil. 2008 à 14:18
c'est exactement ce que j'ai besoin pour ajouter des piles au programme, merci pour votre aide.
0