Libére l'espace pointé pascal/delphi

Résolu
Bonjour,
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

  1. c'est exactement ce que j'ai besoin pour ajouter des piles au programme, merci pour votre aide.
    1. Modérateur
      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.
      1. Modérateur
        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;
    2. Modérateur
      En Pascal :
      new(p); pour demander de la mémoire
      dispose(p); pour libérer la mémoire