IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Libération d'un TStringList


Sujet :

Langage Delphi

  1. #1
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut Libération d'un TStringList
    Salut !

    J'ai une question concernant les TStringList, plus exactement, les fonctions renvoyant un TStringList.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function GetList : TStrings;
    begin
      Result := TStringList.Create; //Création de la liste
      try
        // je remplis la liste
        Result.Add('toto');
      except
        on E : Exception do
          begin
            result.Free;
          end;
      end;
    end;
    Cette function marche très bien.
    Mais le problème est le suivant : comment libérer dans le cas ou la fonction marche correctement la liste result crée ??
    La fin de la fonction libère t-elle automatiquement la liste ??

    J'espère avoir été assez clair ! Merci de m'aider !
    Noisette
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Tu veux faire quoi exactement ? Tu veux libérer la stringlist dans la fonction ? pourquoi renvoyer un Tstrings alors

    Déja il faut utiliser un FreeAndNil dans la gestion de l'exception sinon tu renvoie une référence sur un 'objet n'existant plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function GetList : TStrings;
    begin
      Result := TStringList.Create; //Création de la liste
      try
        // je remplis la liste
        Result.Add('toto');
      except
        on E : Exception do
          begin
            FreeAndNil(result);
          end;
      end;
    end;

  3. #3
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    Pourquoi ne pas faire une propriété List, qui charge une variable FList de type TStrings et la fonction GetList associée à la propriété Charge FList et renvoie ce Field?

    Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FList: TStrings
    property List: TStrings read GetList;
    tu crées et détruis l'objet FList dans les constructeur/destructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function GetList: TStrings;
    begin
    //Tu remplis to FList
      result := FList;
    end;
    Voici mes 5 eurocents

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    Utilises un try...finally en majeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Try
        ton try...except sans le Free
    Finally
        Result.Free;
    end;
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Salut ! J'ai du mal m'exprimer !

    Je ne souhaites pas libérer ma liste dans la fonction !
    Je souhaites juste pourvoir libérer la liste une fois que j'ai fini de l'utilisée !

    Je crois que j'ai trouvé... Dites moi ce que vous en pensez...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Liste := TStringList.Create; //Création de la liste
    Liste.Assign(GetList);
    GetList.Free;
    Merci
    Noisette
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    tu peux aussi faire qqch du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure GetList(var Liste : TStingList) : Boolean;
    begin
     try
      Liste.Add('machin');
      Result := True;
     except
      Result := False;
     end;
    end;
    //...
    Liste := TStringList.Create;
    if not GetListe(Liste) then FreeAndNil(Liste);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Effectivement, j'ai pris la solution de tourlourou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function GetListe(Liste : TStrings) : bool;
      begin
          Liste.Clear;
          Liste.add('TOTO');
      end;
    //......
     
    MaListe := TStringList.Create; //Création de la liste
    if GetLIste(MaListe) then ...
    MaListe.free;
    Merci à tous.
    Noisette
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

  8. #8
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Quel que soit le résultat de la fonction, tu dois libérer la liste, il faudrait donc écrire, pour être propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MaListe := TStringList.Create;
    try
      if GetListe(MaListe) then
      begin
        ... traitement
      end;
    finally
      MaListe.free; 
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  9. #9
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Yes Bloon,

    J'ai mis le Try ... Finally dans mon code, je ne l'ai juste pas retranscrit sur le forum. Je voulais mettre en exergue, la manière dont je passait la liste à la fonction.

    A+
    Noisette
    Fais cogiter ta Noisette !!

    Participez à la page SOURCES Delphi !

    Découvrez le Défi Delphi

    Mon Mail

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/12/2007, 11h10
  2. [Tstringlist] Retrouvez la liste....
    Par remixtech dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 23h05
  3. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57
  4. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  5. TStringList
    Par giaco dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/09/2002, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo