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

C++ Discussion :

[std::map] Erreur de segmentation


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut [std::map] Erreur de segmentation
    Bonjour,

    je vous expose mon probleme, je n'arrive plus à executer mon programme qui bute à cet appel de fonction. Une erreur de segmentation est levée, et je ne vois pas du tout ou pourrait se trouver le problème.
    Peut-être au niveau de l'utilisation de la map, avec qui je ne suis pas trop à l'aise pour le moment. Si vous avez une idée, ce serait sympathique de me débloquer (:

    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
     void ControllerManager::treatEvents(int state){
       14     /* Checking if state is wrong, or no binds are specified for it */
       15     if (bindings.find(state) != bindings.end()){
       16         std::vector<Binding *> binds = bindings[state];
       17         SDL_Event event;
       18         if (binds.size() > 0){
       19             while (SDL_PollEvent(&event)){
       20                 /* If a bind corresponds to the event, we execute the action linked to it */
       21                 for (int i = 0; i < binds.size(); i++){
       22                     if (binds[i]->equals(event)){
       23                         binds[i]->execute();
       24                     }
       25                 }
       26             }
       27         }
       28     }
       29 }
    Merci d'avance ))

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Déjà utilise au maximum les itérateurs!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     void ControllerManager::treatEvents(int state){
       14     /* Checking if state is wrong, or no binds are specified for it */
       15     if (bindings.find(state) != bindings.end()){
       16         std::vector<Binding *> binds = bindings[state];
       17         SDL_Event event;
       18         if (!binds.empty() ) {
       19             while (SDL_PollEvent(&event)){
       20                 /* If a bind corresponds to the event, we execute the action linked to it */
                           std::vector<Binding *>::iterator iter; // etc...
       25                 }
       26             }
       27         }
       28     }
       29 }

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Dans un debuggeur ça plante sur quelle ligne ?

  4. #4
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut

    La map ne me semble pas en cause ici.
    En même temps une map<int, vector<Binding *> > est t'elle vraiment la structure adéquate ?

    bolhrak a raison éxecute ton code pas à pas car difficile de trouver précisément où peux faire planter une segmentation fault sinon

  5. #5
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut
    Merci pour vos réponses, j'ai ciblé le problème grâce à gdb et il se trouvait que j'appelais betement une méthode sur un pointeur null....

    Ce qui malgré tout me parait étrange, puisque quand je supprimais juste le contenu de la méthode copié çi-dessus, et non la signature, l'invocation de la methode sur ce pointeur qui etait donc toujours null ne créait pas de segfault.

    Enfin, voiçi donc quelque chose de résolu ! 'Journée !

  6. #6
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Citation Envoyé par ipingu Voir le message
    Ce qui malgré tout me parait étrange, puisque quand je supprimais juste le contenu de la méthode copié çi-dessus, et non la signature, l'invocation de la methode sur ce pointeur qui etait donc toujours null ne créait pas de segfault.
    Si ta méthode est vide (sans corps), je pense que le compilateur est suffisament "intelligent" pour optimiser et ne pas exécuter cette méthode.

  7. #7
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 133
    Par défaut
    Bien vu (:

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/05/2010, 15h33
  2. Libérer des pointeurs dans une std::map
    Par GaldorSP dans le forum SL & STL
    Réponses: 2
    Dernier message: 09/07/2005, 14h42
  3. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  4. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18
  5. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54

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