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


Sujet :

C++

  1. #41
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par annesophiedecar Voir le message
    setB est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void setB(vector<bool> & _b)
      {
        tab=_b;
      }
    avec tab c'est de taille 7129
    mais pourquoi fais-tu cette affectation 7129 fois?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double r = 0.0;
        r = rng.uniform();
    std::vector<bool> b(7129);
     
       for (int j=0;j<7129;j++)
          {b[j]=rng.flip();
     eo.setB(b);
    cout<<"le num";
    cout<<j;
    //eo.invalidate();
    }
    je verrais plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    double r = rng.uniform();
    std::vector<bool> b(7129);
     
    for (int j=0;j<7129;j++) {
           b[j]=rng.flip();
           cout<<"b[" << j << "] = " << b[j] << std::endl;;
    }
    eo.setB(b);
    maintenant est tu certaine que
    • rng.uniform(); retourne un double
    • rng.flip retourne un boolean


    as-tu activé les warnings de compilation sous gcc/g++ c'est -Wall qu'il faut ajouter au moment de la compilation.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  2. #42
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Aussi, setB() devrait prendre une référence const.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #43
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    vous allez surement me dire que setB devrez etre à l'extérieure de la boucle! j'ai essayé ce cas mais toujours la boucle for s'arrete avant d'atteindre 7129 (elle a attaient 7069 cette fois ) et s'arrete avec erreur de segmentation?

  4. #44
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    voilà le code:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     void operator()(eoPop<EOT>& _parents,eoPop<EOT>& _offspring)
            {  eoPop<EOT> offspringnew, empty_pop;
    unsigned d= 1;
    	EOT  eo ;
     
    reduce(_parents, _parents.size() - d); 
    std::vector <bool> b(7129);
     
       for (int j=0;j<7129;j++)
          {b[j]=rng.flip();
    cout << "la valeur de b";
    cout <<b[j];
    cout<<"le num";
    cout<<j;}
     
     
    eo.setB(b);
    cout <<   eo;
    eo.invalidate();
    cout << "the new size is  ";
     
    cout << eo.size ();
     
     
    //pushback new to offsprings
     
    offspringnew.push_back(eo);
     
    cout<<offspringnew.size();  
     
      apply<EOT>(eval,offspringnew);
     
    merge(offspringnew,_parents);
    // cout << "the new size of parents is ";
    }
    j'ai enlevé rng.uniform(); retourne un double. maintenant il fais la boucle en entier mais le plus bizare c'est que il s'arrete apres la boucle au niveau de cout << "the new size is "; et il m'affiche seulement the newErreur de segmentation (core dumped) vraiment c'est bizare??

  5. #45
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par annesophiedecar Voir le message
    voilà le code:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     void operator()(eoPop<EOT>& _parents,eoPop<EOT>& _offspring)
            {  eoPop<EOT> offspringnew, empty_pop;
    unsigned d= 1;
    	EOT  eo ;
     
    reduce(_parents, _parents.size() - d); 
    std::vector <bool> b(7129);
     
       for (int j=0;j<7129;j++)
          {b[j]=rng.flip();
    cout << "la valeur de b";
    cout <<b[j];
    cout<<"le num";
    cout<<j;}
     
     
    eo.setB(b);
    cout <<   eo;
    eo.invalidate();
    cout << "the new size is  ";
     
    cout << eo.size ();
     
     
    //pushback new to offsprings
     
    offspringnew.push_back(eo);
     
    cout<<offspringnew.size();  
     
      apply<EOT>(eval,offspringnew);
     
    merge(offspringnew,_parents);
    // cout << "the new size of parents is ";
    }
    j'ai enlevé rng.uniform(); retourne un double. maintenant il fais la boucle en entier mais le plus bizare c'est que il s'arrete apres la boucle au niveau de cout << "the new size is "; et il m'affiche seulement the newErreur de segmentation (core dumped) vraiment c'est bizare??
    Que fait la mathode eo.invalidate?
    au vu de son nom, est il possible d'utiliser eo un fois cette fonction appelée?
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  6. #46
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      void invalidate() { invalidFitness = true; repFitness = Fitness(); }
    Bon Jabbounet je ne crois pas que l'erreur vient de là puisque je l'ai mis en commentaire et c'est toujours le meme résultat une erreur de segmentation et le message que je mets ne s'affiche pas en entier! c'est ce qui m'étonne

  7. #47
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Tu sais que ça serait tellement plus simple pour toi que tu te serves d'un debugueur

  8. #48
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Core Dumped, généralement c'est que tu as "nettoyé" un truc de la pile. N'aurais tu pas un delete en trop ?

    Mais oui, un debugger est fortement conseiller pour localiser précisément l'erreur.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  9. #49
    screetch
    Invité(e)
    Par défaut
    je pense que le probleme vient d'un autre trhead... quand tu retires du code, le programme plante "plus tard" parce qu'il va plus vite. Du coup on ne regarde surement pas le bon code la.

    Tapes les commandes comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gdb ton_executable
    run
    bt
    et renvoie nous le résultat

  10. #50
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par screetch Voir le message
    je pense que le probleme vient d'un autre trhead... quand tu retires du code, le programme plante "plus tard" parce qu'il va plus vite. Du coup on ne regarde surement pas le bon code la.

    Tapes les commandes comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gdb ton_executable
    run
    bt
    et renvoie nous le résultat
    +1, si son appli est multithreadé


    et la pour trouvé ce qui intéragit avec, ce n'est parfois pas si simple.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  11. #51
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    j'ai pas mis le debugger parceque ça marche pas trop
    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
    anne@anne-desktop:~/Bureau/paradiseo-1.2.1/paradiseo-eo/build/tutorial/FeatureSelection2$ gdb FeatureSelectionEA 
    GNU gdb 6.6-debian
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i486-linux-gnu"...
    Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
    (gdb) run
    Starting program: /home/anne/Bureau/paradiseo-1.2.1/paradiseo-eo/build/tutorial/FeatureSelection2/FeatureSelectionEA 
    Loading model from file ...
    No such file or directory
     
    Program exited with code 01.
    (gdb) bt
    No stack.

  12. #52
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    peux tu faire la même chose a part que tu trappe run avec les arguments que tu utilise pour lancer ton programme.

    exemple :
    si habituellement tu tappe
    mon_prog a b c toto

    tu fais run a b c toto
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  13. #53
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    Merci Jabbounet voilà ce que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Program received signal SIGSEGV, Segmentation fault.
    0x08076848 in apply<eoFeatureSelection<eoScalarFitness<double, std::greater<double> > > > ()
    (gdb) bt
    #0  0x08076848 in apply<eoFeatureSelection<eoScalarFitness<double, std::greater<double> > > > ()
    #1  0x0808ff00 in eoReduceMergeCLONALG<eoFeatureSelection<eoScalarFitness<double, std::greater<double> > > >::operator() ()
    #2  0x0807c212 in eoClonalg<eoFeatureSelection<eoScalarFitness<double, std::greater<double> > > >::operator() ()
    #3  0x0806ddcd in main ()
    c'est une méthode correcte qui fait des calculs je vois pas ou est le probleme

  14. #54
    screetch
    Invité(e)
    Par défaut
    c'est quand meme la fonction qu'il faut examiner
    apres toute ces commandes (run, bt, toussa) essaye la commande "frame" ca devrait ecrire la ligne qui a planté si tout va bien (nom du fichier, ligne, etc)
    en fait je crois que ton executable est compilé sans les informations de débug. recompile le avec l'option -g pour avoir plus d'infos, avant de relancer gdb

  15. #55
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    j'ai tapé frame, elle m'affiche la procedure où il y a erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #0  0x080767b8 in apply<eoFeatureSelection<eoScalarFitness<double, std::greater<double> > > > ()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    template <class EOT>
    void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
    {
        for (unsigned i = 0; i < _pop.size(); ++i)
        {
            _proc(_pop[i]);
        }
    }
    Je ne comprends pas ou est le problème puisque j'utilise cette procedure dans d autre classe et ça m 'a jamais généré d'erreur de segmentation auparavnt

  16. #56
    screetch
    Invité(e)
    Par défaut
    recompile en mode debug pour en savoir plus; ton executable semble optimisé et ne contient pas les infos de debug, c'est pas possible de savoir d'ou vient le probleme dans ce cas.

  17. #57
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 53
    Points : 16
    Points
    16
    Par défaut
    j'arrive pas à avoir le mode debug et compiler avec -g puisque pour compiler je fais make

  18. #58
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par annesophiedecar Voir le message
    j'arrive pas à avoir le mode debug et compiler avec -g puisque pour compiler je fais make
    lol

    change le CFLAGS dans ton Makefile
    make clean && make

    PS : eclipse ça marche pas mal mieux que gdb en mode texte...

  19. #59
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Elle utilise cmake. Essaye .
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  20. #60
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    autrement petite question:

    Es tu certaines que _pop.size() ne varie pas pendant l'exécution de ta fonction?
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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