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 :

erreur de segmentation lors d'un insert dans un map


Sujet :

C++

  1. #1
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut erreur de segmentation lors d'un insert dans un map
    Bonjour à tous,

    mon problèm est tout simple, pourant je ne vois pas de quoi il s'agit
    voilà, j'utilise un méthode qui prend comme paramétre un pointeur su un map<int,int>

    dans cette méthode, je voudrai inserer des elements dans le map
    la compilation marche bien mais aprés le insert provoque une erreur de segmentation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    void ma_methode(fstream *f,map<int, int> *m)
    {
    //exemple
    (*m).insert(pair<int, int>(3,2));
     
    }



    apres dans le main je fais appel à ma methode de la façon suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    map<int,int> *m;
     
    ma_methode(&file,m);
    meci si vous avez des idées

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par nina2007 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    void ma_methode(fstream *f,map<int, int> *m)
    {
    //exemple
    (*m).insert(pair<int, int>(3,2));
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    map<int,int> *m;
     
    ma_methode(&file,m);
    j'aurais plutôt fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void ma_methode(fstream *f,map<int, int> *m)
    {
    //exemple
    m->insert(std::make_pair(3,2));
    }
    sache que (*m). est identique à m->

    Dans ton main, il y a un problème : jamais tu n'as alloué la mémoire pour la variable m. A ta place, j'aurais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    map<int,int> m;
     
    ma_methode(file,m);
    avec comme fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void ma_methode(fstream  & f,map<int, int>  & m)
    {
    //exemple
    m.insert(std::make_pair(3,2));
    }
    ce code ressemble plus à du C++. Le tiens ressemblait plus à du C

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Déjà, je ne comprend pas trop pourquoi passer un pointeur sur fstream et sur map au lieu d'une référence ... c'est souvent se faire du mal pour rien

    Ensuite, l'idéal est souvent de passer par la fonction make_pair pour obtenir quelque chose d'insérable de manière correcte dans ta map.

    Cela se traduirait donc par un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void ma_methode(ifstream & f,map<int, int> &m)
    {
        /* je présumes que, si tu transmet un fichier, c'est pour y lire les infos
         * qui t'intéressent  :D 
         */
        int key; 
        int value;
        f>>key>>value;
        m.insert(make_pair(3,2));
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    merci

    le problème c'etait effectivement le passage du map
    mais rien avoir avec make_pair (ça marche avec mon code)

    sinon je comprends toujours pas pourquoi quand je fais passer un pointeur sur map, ça marche pas!!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par nina2007 Voir le message
    sinon je comprends toujours pas pourquoi quand je fais passer un pointeur sur map, ça marche pas!!!
    tout simplement parce que tu n'as jamais alloué ta mémoire...

  6. #6
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    quand je fais

    c'est pas une allocation de memoire???
    un pointeur sur un map n'implique pas une allocation de memoire?
    merci

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par nina2007 Voir le message
    quand je fais

    c'est pas une allocation de memoire???
    un pointeur sur un map n'implique pas une allocation de memoire?
    merci
    Ou la... non pas du tout: un pointeur, ce n'est qu'une variable qui permet de représenter une adresse mémoire, rien de plus.

    C'est bien souvent utilisé en conjonction avec l'allocation dynamique de mémoire (new) qui implique, elle-même de veiller à la libérer correctement lorsque l'on n'a plus besoin de l'objet pointé (delete), car l'allocation dynamique de la mémoire implique que l'on prend la responsabilité de la durée de vie de l'objet.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    merci pour votre explication

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/05/2014, 16h52
  2. Erreur lors de l'insert dans une BDD MySQL
    Par gagaz21 dans le forum C#
    Réponses: 4
    Dernier message: 16/07/2011, 00h10
  3. Récupération message d'erreur lors d'une insertion dans une BDD
    Par LoDev dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 22/12/2007, 19h11
  4. [MySQL] Erreur lors de l'insertion dans ma base de doneés
    Par ANISSS dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/11/2006, 12h47

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