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 du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    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...

  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
    Points : 4 625
    Points
    4 625
    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
    Points : 16 213
    Points
    16 213
    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.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    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
    Points : 15 920
    Points
    15 920
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 167
    Points : 69
    Points
    69
    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