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

Delphi Discussion :

[TStringList] AddObject et FreeAndNil


Sujet :

Delphi

  1. #1
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut [TStringList] AddObject et FreeAndNil
    Bonjour,

    Dans mon programme je charge une stringList de la facon suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i:=0 to 500 do
      MySl.AddObject(IntToStr(i), TObject(i));
    comment libérer la totalité de cette StringList ?

    Une chose est sûre le code suivant ne fonctionne pas (violation d'acces sur le Free, car le l'Object est en réalité un entier transtypé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i := 0 to Pred(MySl.count) do
      MySl.objects[i].Free;
    Est-ce que un FreeAndNil est suffisant ?
    Est ce que tout les entiers alloués vont etre libéré ?

    Merci,
    Dry

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    oui FreeAnNil, voir MySl.free, est suffisant étant donné que tu ne stockes pas réellement des objets

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      PInteger = ^Integer;
     
    ...
    for i:=0 to 500 do
      MySl.AddObject(IntToStr(i), PInteger(i));
    tu peux écrire cela pour te faire penser que c'est n'est pas un Objet, mais un subterfuge pour stocker un Integer (Tag ?)

    J'ai l'impression que tu dois programmer en Java, le Cast TObject(i) ne donne pas un Objet Integer, mais un speudo pointeur qui ne pointe rien de bon ^_^ !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par ShaiLeTroll
    J'ai l'impression que tu dois programmer en Java, le Cast TObject(i) ne donne pas un Objet Integer, mais un speudo pointeur qui ne pointe rien de bon ^_^ !
    Oui ben en attendant ton code marche mieux que le tiens Dans ton cas du donnes 500 fois la même adresse, d'un entier qui n'existera bientôt plus

    Pas taper
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    D'accord, un simple Free suffit,
    Merci

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Dry
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i:=0 to 500 do
      MySl.AddObject(IntToStr(i), TObject(i));
    J'utilise très souvent cette technique pour stocker un ID pour chaque ligne de la liste. Pas besoin de libérer quoi que ce soit parce qu'il n'y a pas d'objet autre que la liste. On ne fait qu'utiliser les 32 bits du pointeur pour y stocker la valeur d'un entier. Vraiment pratique.
    -Slimjoe

  7. #7
    Dry
    Dry est déconnecté
    Membre du Club

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    On ne fait qu'utiliser les 32 bits du pointeur pour y stocker la valeur d'un entier. Vraiment pratique.
    C'est l'explication technique qui me manquait, maintenant tout est claire dans mon esprit,
    Merci

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Effectivement sjrd, j'ai fait une grosse boulette, de te façon ça ne compile même pas, la honte ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
      PseudoInteger = Pointer;
     
    ...
    for i:=0 to 500 do
      MySl.AddObject(IntToStr(i), PseudoInteger(i));
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for i:=0 to MySl.count - 1 do
      K:= Integer(MySl.Objects[i]);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Insertion dans fichier texte + rapide que TStringList ?
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/02/2004, 11h34
  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