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 :

Comment bien gerer la mémoire avec les TStringList?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 97
    Points
    97
    Par défaut Comment bien gerer la mémoire avec les TStringList?
    Bonjour,

    J'ai des problèmes de mémoire avec des TStringList.

    Le code suivant est bogué, mais où?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure gestion_memoire;
    var
        m_liste_types:TStringList;
    begin
      m_liste_types:= TStringList.Create;
      m_liste_types.Add('Une chaine exemple');
      m_liste_types.Free;
    end;
    Merci

    David

  2. #2
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Bonsoir,

    J'ai utilisé ton code tel quel et je n'ai pas eu de problème... 8)

    Voilà la façon dont je l'ai exécuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
      procedure gestion_memoire;
      var
        m_liste_types:TStringList;
      begin
        m_liste_types:= TStringList.Create;
        m_liste_types.Add('Une chaine exemple');
        m_liste_types.Free;
      end;
    begin
      gestion_memoire;
    end;
    Le problème doit être ailleurs ? Peux-tu préciser le message que tu as eu (exception, avertissement) et qui te laisse penser qu'il puisse y avoir une mauvaise gestion de la mémoire.
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 99
    Points : 126
    Points
    126
    Par défaut
    Salut,

    pour être plus juste il faudrais include le code dans un Try...finally pour être sur de la libération de la mémoire même en cas de problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.Button1Click(Sender: TObject); 
      procedure gestion_memoire; 
      var 
        m_liste_types:TStringList; 
      begin 
        m_liste_types:= TStringList.Create; 
        try
          m_liste_types.Add('Une chaine exemple'); 
        finally
          m_liste_types.Free;
        end;
      end; 
    begin 
      gestion_memoire; 
    end;
    A+---------------> Nat <-------------------

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut Re: Comment bien gerer la mémoire avec les TStringList?
    Citation Envoyé par david_chardonnet
    Le code suivant est bogué, mais où?
    Quel est le problème exactement ?
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2003
    Messages : 115
    Points : 129
    Points
    129
    Par défaut
    Le code est bogué ... c'est à dire :
    Ca ne compile pas ? Donne nous le messagedu compilo
    Ca plante à l'éxécution ? Donne nous le message
    Ca ne fait pas ce que tu attends ? Dis nous ce que tu veux faire, et ce que ca fait à la place

    Sinon, à première vue, je dirais que créer un TStringList, le remplir, puis le libérer tout de suite ne sers pas à grand chose ... c'est certainement un test ...
    JP

    N'ayez pas peur de la perfection, vous ne l'atteindrez jamais !
    Salvador Dali

  6. #6
    Membre régulier
    Inscrit en
    Mars 2003
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 106
    Points : 97
    Points
    97
    Par défaut
    J'avais un message de Memcheck comme quoi de la mémoire n'etait pas désallouée. Et à chaque execution du programme, 4 ko de RAM disparaissaient

    J'ai trouvé... J'oubliais de faire un free...

    Je croyais qu'il fallait désallouer les chaines qu'on insérait de façon individuelle...

    Désolé et merci...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/07/2006, 20h55
  2. Réponses: 6
    Dernier message: 18/05/2006, 14h11
  3. Réponses: 1
    Dernier message: 03/05/2006, 10h49
  4. Comment ecrire un charactere 0x00 avec les CFile
    Par barthelv dans le forum MFC
    Réponses: 10
    Dernier message: 12/10/2005, 10h26

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