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 C++ Discussion :

STL parcourir une map.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut STL parcourir une map.
    Bonjour,

    dans un programme contenant une map, j'ai besoin de parcourir la map en question, afin de récupérer un élément. J'écris donc le code suivant:

    Mais lors de l’exécution j'ai une erreur de segmentation. Je ne vois pas du tout comment faire.
    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
     
    Forme* Usine::trouverForme(const string& chaine)
    {
            map<string, Forme*>::iterator it;
    	it= mymap.find(chaine);
    	if( it==mymap.end() )
    	{
    		cout << "non trouvé" << endl;
    		return(NULL);
     
    	}
    	else
    	{
    		cout << "trouvé" << endl;
    		return((*it).second);
    	}
    }

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonsoir.

    Tu es sûr que c'est dans cette fonction que survient l'erreur de segmentation ?
    Qu'est-ce que mymap (une variable membre, une variable membre statique, une variable globale, etc.) ?
    Usine::trouverForme est une fonction membre statique ou non ?
    Usine::trouverForme peut-elle être appelée lors de la construction d'un objet statique ?

    Je n'ai pas une grosse visibilité de ton projet, mais ça me fait penser à un problème (vicieux...) que j'ai rencontré récemment...
    F.A.Q. C++: Qu'est-ce que le 'fiasco dans l'ordre d'initialisation des variables statiques' ?

    Si ce n'est pas ça, il va falloir mettre un peu plus de code pour que l'on puisse y voir quelque chose...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    mymap est ma donnée privé, de la forme map<string, Forme*>.

    dans mon header voici le prototype de créer forme. (pas de statique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forme* creerForme(const string& chaine)
    creerForme n'est pas appelé lors de la construction d'un objet statique. Il s'agit d'une foction qui ressort un objet de ma map correspondant à la clé qu'il a en argument.

    L'erreur de segmentation survient lors du test du programme quand on appelle creerForme.

  4. #4
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Dans ce cas, si tu pouvais au moins mettre le code de Usine::creerForme...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    problème de recopiage de code, trouverFrome=creerForme (j'ai changé le nom pour que la fonction soit plus compréhensible.

    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
     
    Forme* Usine::creerForme(const string& chaine)
    {
    	map<string, Forme*>::iterator it;
    	it= mymap.find(chaine);
    	if( it==mymap.end() )
    	{
    		cout << "non trouvé" << endl;
    		return(NULL);
     
    	}
    	else
    	{
    		cout << "trouvé" << endl;
    		return((*it).second);
    	}
    }

  6. #6
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Ok.

    Citation Envoyé par peapol Voir le message
    L'erreur de segmentation survient lors du test du programme quand on appelle creerForme.
    De quel test parles-tu ?
    Si c'est celui de la ligne 6, ça veut certainement dire que mymap n'est pas (complètement) construit au moment de l'appel de la fonction.

    Je ne vois pas d'autre explication.
    Mais encore une fois, avec si peu de code, c'est difficile de se rendre bien compte...

  7. #7
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Il serait sans doute de meilleure qualité de programmation de passer ta mymap en référence comme argument à ta fonction. On y verrait déjà plus clair.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Dans mon main j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bool b;
    Forme* ptrF;
    string cle;
     
    cout << "quel forme voulez vous copier? " << endl;
    cin >> cle;
    ptrF=mon_usine.creerForme(cle);
    cout << "quel clés pour le nouveaux? " << endl;
    cin >> cle;
    b=mon_usine.ajouterForme(cle,ptrF);
    ma fonction creerForme (je l'ai modifié pour qu'elle soit plus courte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Forme* Usine::creerForme(const string& chaine)
    {
    	if( mymap.count(chaine)>0)
    	{
    		return(mymap[chaine]->dupliquer());
    	}
    	else
    	{
    		cout << "non trouvé" << endl;
    		return(NULL);
    	}
    ma fonction dupliquer dépend de ma classe forme, je l'ai testé elle fonctionne bien sans faute de segmentation (elle rend une copie d'une forme sous forme de pointeur)
    en données privé j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private:
    	 map<string, Forme*> mymap;

Discussions similaires

  1. Parcourir une map en fonction de deux critères
    Par lucares dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 29/09/2011, 20h51
  2. Comment parcourir une map en sens inverse
    Par alen dans le forum SL & STL
    Réponses: 8
    Dernier message: 03/08/2008, 20h24
  3. créer et parcourir une map <int,list>
    Par GLSpirit dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/05/2007, 14h59
  4. Réponses: 5
    Dernier message: 26/05/2005, 15h40
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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