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

SL & STL C++ Discussion :

pb dans la stl::list avec size


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut pb dans la stl::list avec size
    Bonjour,

    j'ai un pb avec une liste qui me génère un pb de retour pour liste->size() et qui me retourne pour liste->Max_size() -1 !!!

    hors dans mon index, j'ai :
    size_type size() const->

    Returns the size of the list. Note: you should not assume that this function is constant time. It is permitted to be O(N), where N is the number of elements in the list. If you wish to test whether a list is empty, you should write L.empty() rather than L.size() == 0.

    size_type max_size() const->

    Returns the largest possible size of the list.
    Donc, il n'est pas question de valeur négative...


    class Champ_uni_list : public list<Champ_uni_work<int> >{...}

    //...

    Champ_uni_list templist;
    ((list<Champ_uni_work<int> > *)(&templist));
    ((list<Champ_uni_work<int> > *)(&templist))->max_size();
    ((list<Champ_uni_work<int> > *)(&templist))->size();
    Bon je rajoute que c'est une partie des tests que j'ai fait pour essayer de trouver ce qui ne marche pas et que je fais afficher des choses entre chaque action.
    Le pb ne semble pas être du au transtypage, n'y l'accès aux méthodes de la liste puisque que max_size me renvoi -1 mais dès que je demande la size, ça crash l'application...
    ...et normalement, je ne devrais pas avoir de problème de pointeur.

    Merci d'avance de l'aide que vous pourrez m'apporter.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Fais gaffe avec l'héritage public sur les conteneurs de la STL : Aucune fonction n'est virtuelle (pas même le destructeur), donc ce n'est pas une classe propice au polymorphisme.

    Donc, l'héritage dessus n'est pas conseillé car la plupart du temps, il ne sert à rien et montre plutôt une mauvaise conception...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ton code est n'importe quoi.
    On ne dérive pas des conteneurs de cette manière.
    On n'utilise pas les casts C avec l'héritage.
    Inutile aussi d'introduire des pointeurs.

    Ton code n'affiche rien, aucun moyen de savoir quelles sont les valeurs.
    me génère un pb de retour pour liste->size()
    Quel problème ?

    me retourne pour liste->Max_size() -1 !!!
    Tu as probablement converti la valeur de retour en un entier de même taille mais signé. (genre int)

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par DEVfan
    ...et normalement, je ne devrais pas avoir de problème de pointeur.
    Avoir des pointeurs, c'est déjà avoir un problème de pointeurs...

    A part ça, sans boule de cristal, on a du mal à deviner avec ce que tu nous montre, qui n'a pas l'aire d'être ton vrai code (ou alors, tu as un style de codage pour le moins... spécial. Ecrire ((list<Champ_uni_work<int> > *)(&templist))->size(); là où templist->size(); suffit, c'est du vice.

    Je seconde aussi le fait que std::list ne soit pas fait pour être dérivé, et que le faire quand même est une conduite à risques, qui de toute façon est hyper rarement justifiée.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    OK... c'est pas adapté. (même si c'est pratique d'encapsuler)
    et templist->size() ... et bien non, ça n'est pas compris par mon compilateur.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par DEVfan
    OK... c'est pas adapté. (même si c'est pratique d'encapsuler)
    et templist->size() ... et bien non, ça n'est pas compris par mon compilateur.
    Et templist.size() ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Par défaut
    Oui, j'me suis trompé en écrivant mais pas dans mon code...

    Par contre, si j'ai du faire les transtypages, notamment, c'est pour vérifier ce genre d'erreur!

    ...donc templist.size(), il comprend mais ça fait stopper le prog... et aucun moyen de savoir pourquoi.
    (Sous DEV..."Fatal signal: Segmentation Fault (SDL Parachute Deployed)" ne sert à rien...)

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/12/2012, 19h26
  2. Réponses: 12
    Dernier message: 12/03/2007, 16h58
  3. Réponses: 17
    Dernier message: 12/07/2006, 22h04
  4. Réponses: 5
    Dernier message: 01/06/2006, 16h18
  5. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27

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