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 :

TobjectList contenant des TstringList


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut TobjectList contenant des TstringList
    Salut tout le monde, j'ai un soucis avec un TobjectList qui contient des TstringList, j'arrive parfaitement à insérer mes TstringList dans le TobjectList mais .... je n'arrive pas à accéder à mes TstringList à partir du TobjectList.
    En fait, j'maimerais faire quelque chose dans ce genre la pour y accéder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monStrList := monObjectList.Items[indice];
    Le problème étant naturellement que TobjectList.items renvoie un Tobject et que j'essaie de l'affecter à un TstringList. Je n'arrive pas à trouver la méthode pour récupérer mon StringList.
    Je deviens fou. Aidez-moi.
    H.E.L.P.

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monStrList := TStingList (monObjectList.Items[indice];
    ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    le transtypage (si c'est bien le terme) fonctionne bien, un grand merci, j'aurais du y penser plus tôt, le seul (et éternel) problème que je rencontre se situe au niveau de la libération mémoire et de la destruction de mon TObjectList qui me dit : "opération de pointeur non valide".

    J'ai fait migrer mon code vers un TobjectList plutôt qu'un Tlist mais je retombe toujours sur la même erreur.
    voici ce que je fais dans le desctructeur de ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monTobjectList.Free;
    Le TobjectList détruit-il vraiment proprement tous les objets qu'il contient?

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Je ne sais pas exactement pour TObjectList, qui n'existe pas dans D4
    Pour moi avec un Tlist, qui ne gère pas les destructions, je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i := 0 to MyList .Count - 1 do
    begin
      MyStrList := TStringList (MyList .Items [i];
      MyStrList .Free;
    end;
    MyList .Free;
    Si tu pouvais être un peu plus précis sur l'erreur...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    C'est exactement ce que j'avais fait et ça fonctionne pour les n-1 éléments de la TList mais pas pour l'élément n, j'ai retourné le problème dans pas mal de sens et rien à faire, encore et toujours la même erreur.
    J'ai fait migrer donc mon code vers des TobjectList et c'est toujours pareil, je ne sais vraiment plus quoi faire.

  6. #6
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    A mon sens, de deux choses l'une :
    - Ou tu as zappé le - 1 après List.Count (ça arrive aux meilleurs )
    - Ou le dernier TStringList n'avait pas été créé (il arrive qu'on "prépare" la place avant de s'apercevoir qu'on n'a plus rien à charger, on s'arrête et du coup la dernière place est bien là, mais vide).

    Sinon je ne vois pas

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    OK, donc, après moult déboguage, j'ai compris ou était mon erreur. Je vous tiens au courant.
    J'ai au moins accentuer le point sur une chose dont j'étais déjà sûr : C'est toujours la faute du programmeur, jamais celle du compilateur !!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Je pense que vous avez laisser le OwnsObject à true (Par defaut).

    Exemple:
    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
    17
    18
     
     
    List := TObjectList.create;
    // OwnsObject = true par defaut
     
    List.Add(TStringList.create(Nil));
     
    AObject := TStringList[0];
    Liste.Remove(AObject);
    // Dans ce cas OwnsObject = True don AObject (ma string list) a été détruit
     
    List.OwnsObject := False;
    AObject := TStringList[0];
    Liste.Remove(AObject);
    // Dans ce cas OwnsObject = false, aObject existez toujour donc je fais le free
    AObject.free;
     
    List.free;

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Je vais avoir maintenant une nouvelle question :
    si 2 instances du même objet pointe sur la même adresse et que l'une des 2 instances détruit et libère la mémoire à cette adresse, les 2 instances de l'objet en question sont-elles détruites?

    Pour être plus clair : Je dispose de 2 variables TstringList (TSL1 et TSL2) et d'une variable TList (maListe).
    J'instancie une 10aine d'objet TSL1 et 1 instance de TSL2.
    Mes 10 TSL1 sont contenus dans maListe. A un moment donné TSL1 et TSL2 pointe sur la même adresse d'un élément de maListe (en l'occurence lors de la destruction).
    J'exécute alors ma boucle qui parcours maListe et libère chaque TSL1 et il arrive au dernier élément que TSL1 et TSL2 pointe sur le dernier élément de maListe.
    La libération de cet élément se passe bien, seulement, lorsque je souhaite libérer TSL2, j'ai droit à une jolie violation d'adresse. Cela me semble logique mais j'aimerais être sûr que toutes mes instances soient bien détruites.
    Comment en être sûr? Merci.

  10. #10
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Points : 2 307
    Points
    2 307
    Par défaut
    oui, si tu as deux variables d'instances qui pointent sur un objet, si tu libère l'objet, il est libéré pour les deux variables qui du coup pointent sur une adresse qui n'est plus valide (d'où la violation d'accès). Il est d'ailleurs conseillé de positionner les variable à nil après libération afin d'éviter ce genre de soucis (nil est une valeur facilement testable).

    Par contre, si tu as une TObjectlist, je vois pas pourquoi tu la parcours pour supprimer tous les objets qu'elle contient, laisse le paramètres ownobj à true elle le fera toute seule (par contre ne gère plus la destruction de ses objets du coup.

    @++
    Dany

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    non, en fait, je suis revenu sur une TList, c'est pour ça que je boucle, ça fonctionne correctement maintenant, j'ai le moral, en plus c'est le WE alors tout va bien. Je sais pas ce qu'il s'est passé avec le TObjectList mais je songe à l'utiliser quand même dans les autres classes que j'ai à développer.
    Merci à tous pour le coup de main.
    A+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/06/2005, 00h56
  2. [C#] Tableau généré contenant des checkbox
    Par la_muraille dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/04/2005, 13h16
  3. [JAR] créer une archive .jar contenant des images.
    Par keny dans le forum Général Java
    Réponses: 2
    Dernier message: 14/03/2005, 14h17
  4. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 16h29
  5. Cherche un site contenant des sources valables
    Par Kartofel dans le forum Debian
    Réponses: 7
    Dernier message: 14/01/2004, 15h05

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