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 :

iterator de vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut iterator de vector
    Bonjour à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    vector<Ball*>::iterator it;
    for(it=b.begin();it!=b.end();it++){
       Ball *sf=(*it);
       cout << "ball : " << sf->getName() <<endl; // fonctionne pas
    }
    Ball *sf1=b[0];
    cout << "ball : " << sf1->getName() <<endl; // fonctionne
    Je pense ne pas avoir bien compris le fonctionnement des iterator(s) de vector(s).
    Quelqu'un peut-il me dire où est la différence, dumoins pourquoi le 1ier exemple ne marche pas.

    Merci et bon weekend à tous

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Qu'entends-tu par ça ne fonctionne pas ?
    Parce que ça l'air correct là comme ça en 3 lignes, même si en général on écrirait sans doute plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(vector<Ball*>::const_iterator it=b.begin();it!=b.end();++it)
      ...
    Mais c'est un détail à la limite...

    MAT.

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    J'ai une erreur de segmentation sur l'un, et sur l'autre le nom est affiché comme souhaité.
    je posterai l'erreur demain, car je n'ai pas envie de redémarrer mon ordi(Win/linux) et ai déjà modifié le code.
    Demain, je mets l'erreur.
    Bonne soirée à tous

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Tes bout de code sont correctes.
    ton problème, ça sent l'erreur mémoire à plein nez..
    Faudra le reste de ton code pour t'aider.
    Aprés pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ball *sf1=b[0];
    cout << "ball : " << sf1->getName() <<endl;
    fonctionne et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(it=b.begin();it!=b.end();it++){
       Ball *sf=(*it);
       cout << "ball : " << sf->getName() <<endl; // fonctionne pas
    }
    Parce que t'as de la chance (ou pas, a toi de voir).Mais l'autre plantera un jour ou l'autre.
    Les erreurs mémoire génère des bug aléatoire. L'apparition du bug(qui est bien là) va dépendre si tu est en debug ou en release, de l'état de ta machine,...

  5. #5
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Parce que t'as de la chance (ou pas, a toi de voir).Mais l'autre plantera un jour ou l'autre.
    Les erreurs mémoire génère des bug aléatoire. L'apparition du bug(qui est bien là) va dépendre si tu est en debug ou en release, de l'état de ta machine,...
    J'avais pensé à un problème mémoire.
    Il vient bien du contenu du vector, pas du vector lui-même ?


    Voici ce que me dit gdb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Program received signal SIGSEGV, Segmentation fault.
    0x04ba40fa in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string ()
       from /usr/lib/libstdc++.so.6
    (gdb) up
    #1  0x0804e727 in File::getName (this=0x0) at File.C:30
    30              return this->name;
    Current language:  auto; currently c++
    (gdb) cont
    Continuing.
     
    Program terminated with signal SIGSEGV, Segmentation fault.
    The program no longer exists.
    (gdb) quit

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par je®ome Voir le message
    #1 0x0804e727 in File::getName (this=0x0) at File.C:30
    30 return this->name;
    Tu accèdes manifestement à un pointeur nul (this=0x0)...

    MAT.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Tu accèdes manifestement à un pointeur nul (this=0x0)...

    MAT.
    Je rajouterai que tu accède (surement) a une adresse memoire d'un element detruit.
    Ca marche dans un cas car la memoire n'as pas encore été réutilisé(coup de chance)
    Ilfaudrait plus de code pour t'aider

  8. #8
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Re,

    je suis en train de chercher avec valgrind, mais ce n'est pas du gateau.
    Mon code est trop long et je ne peux (ne veux) pas le mettre.

    dans Hes.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Hes
    {
       private:
       ...
       vector<Ball*> b;
       ...
    }
    après dans une méthode de la même classe hes.C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       Ball *c=new Ball(name);
       b.push_pack(c);
    après dans une autre méthode, je fais ce que je vous ai montré en début de post.

    Il n'y a pas de constructeur à appeler pour un vector, ou si ?

    Merci de votre aide

Discussions similaires

  1. [VC6 to VS2008] Pb d'Iterator de Vector
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 29/08/2008, 09h35
  2. Explication de iterator et vector
    Par Airlink dans le forum Langage
    Réponses: 1
    Dernier message: 16/06/2008, 19h51
  3. Réponses: 1
    Dernier message: 27/09/2006, 16h21
  4. [struts][iterate] problème logic:iterate avec un Vector
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 9
    Dernier message: 31/03/2004, 18h05
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

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