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 :

[Syntaxe] Erreur segmentation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut [Syntaxe] Erreur segmentation
    Bonjour a tous je suis nouveau dans ce forum et n'ayant pas un super niveau en programmation on peut dire que je débute dans ce domaine.
    Alors je vous explique mon proble jai fait un programme qui est censé afficher une courbe de bezier par rapport a plusieurs point de controle. Le programme se compile bien mais lorsque je le lance jai le message suivant qui saffiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de segmentation (core dumped)
    jai alors essayer de localiser l'erreur avec la commande :
    mais jai un nouveau message d'erreur qui est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    This GDB was configured as "i486-linux-gnu"...
    Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
    /home/john/core: No such file or directory.
    Voila je ne sais plus quoi faire donc un petit cuop de main serait vraiment le bienvenu si quelqu'un a une idée
    jai mis mon programme en piece jointe...
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Tu peux essayer dans l'autre sens :

    gdb bezierN

    > run

    seg fault...

    > bt

    après tu as des outils pour avoir un gdb plus user friendly ( ddd, insight, et peut être d'autre)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    bonsoir et merci pour la reponse car grace a ta manip jai reussi a savoir ou etait l'erreur car quand que je tappe ce que tu mpas dit jai ca qui s'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Starting program: /home/john/bezierN 
     
    Program received signal SIGSEGV, Segmentation fault.
    0x08048fce in ctrl::ajouter (this=0xbf921ef0, p={x = -4, y = -4})
        at beziersN.cpp:14
    14                            this->list[this->nbCtrlPoints] = p;
    donc apparement il n'aime pas ma facon d'ajouter des points dans ma liste jai donc essayer de modifier le programme en en creant une fonction ajouter en dehors de ma structure mais cela ne change rien il bloque toujuors au meme endroit c'est a dire a l'ajout du premier point .
    De plus jai essayer sous insight et la le programme s'arrete bien apres a la ligne 114 exactement qui est la suivante :
    voila jme dit que ca doit etre quelquechose de tout bete mais j'arrive pas a trouver quoi ...

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct ctrl {
            XY *list;
            int nbCtrlPoints;
            void ajouter(XY p){
                          this->list[this->nbCtrlPoints] = p;
                          this->nbCtrlPoints+=1;
                          }
            }CtrlPoints
    Si tu fais appelles la méthode ajouter tu adresses list qui vaut NULL ou 0 !
    IL faudrait déclarer ajouter comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            void ajouter(XY p){
                          list =new XY;list=p;nbCtrlPoints++;
                          }
    En plus dans CtrlPoints il n'ya pas de quoi parcourir la liste

    Apprendre le déboguage pas à pas
    Prendre sinon std::list c'est se casser moins la tête.
    Tu peux faire hériter CtrlPoints de std::list

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    Un exemple de gestionnaire de liste de pts pourrait être ainsi :
    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
     
    class ConteneurPts()
    {
    XY *ptr_suivant;
    XY *ptr_prec;
    ConteneurPts(){};
    Ajouter(float X,float Y );
     
    };
     
    ConteneurPts::ConteneurPts()
    {
     
    	ptr_suivant=0;
    	ptr_prec=0;
     
    }
     
     
    int ConteneurPts::NbrPts()
    {
     
     
    }
     
    ConteneurPts::Ajouter(float X,float Y )
    {
    ptr_prec=ptr_suivant;
     
    ptr_suivant=new XY;
    ptr_suivant->x=X;
    ptr_suivant->y=Y;
     
    }
    Mais vaut mieux définir un template parce que tu ne vas pas toujours passer des points X et Y en paramêtre

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    sinon avec std::vector ou std::list c'est vraiment plus souple

    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
    36
    37
    38
    39
    40
    41
     
    std::vector<XY> liste_pts;// j'ai mis en global c'est pas beau 
     
    XY CalcBezier(double t)
    {
    	int i;
    	XY p;
    	for(i=0;i<liste_pts.size();i++)
    	{
           p.x+=Berstein(i, l.nbCtrlPoints, t)*liste_pts[i].x;
           p.y+=Berstein(i, l.nbCtrlPoints, t)*liste_pts[i].y;
        }
    	return p;
    }
     
    ///.........
     
    void display(void)
    {
    	struct XY p1, p2, p3, p4;
        CtrlPoints l;
     
        p1.x=-4.0;
        p1.y=-4.0;
        p2.x=-2.0;
        p2.y=4.0;
        p3.x=2.0;
        p3.y=-4.0;
        p4.x=4.0;
        p4.y=4.0;
    	liste_pts.push_back(p1);
    	liste_pts.push_back(p2);
    	liste_pts.push_back(p3);
    	liste_pts.push_back(p4);
    	glClear(GL_COLOR_BUFFER_BIT);
    	glColor3f(1.0, 1.0, 1.0);
    	glPointSize(5.0);
    	glColor3f(1.0, 1.0, 0.0);
     
    	glFlush();
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    bonsoir bonsoir alors jai fait comme tu mas dit et cela marche tres bien (voir fichier BezierN2.cpp)j'ai donc voulu passer a un stade superieur et au lieu de rentrer les coordonnées des points directement dans le programme jai fait en sorte que celui ci aille les lire dans un fichier texte. Et la jai un soucis que je n'arrive a pas a résoudre depuis cet apres midi (jai un mal de crane pas possible) a savoir que les informations que je récupère avec le fscanf et que je place directement dans le vector ne sont plus dans la fonction drawbezier alors que je procède exactement de la meme facon dans le fichier bezierN2.cpp!
    un petit coup de pouce serait le bienvenu car ma tête va exploser ...
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Erreur segmentation
    Par hornov dans le forum C
    Réponses: 6
    Dernier message: 18/02/2007, 01h02
  2. chaine de caractères , erreur segmentation
    Par psgman113 dans le forum C
    Réponses: 17
    Dernier message: 19/01/2007, 17h51
  3. erreur segmentation java
    Par dj cediorko dans le forum Langage
    Réponses: 1
    Dernier message: 31/12/2006, 12h30
  4. [erreur] Segmentation fault
    Par fveysseire dans le forum C
    Réponses: 11
    Dernier message: 15/06/2006, 14h44
  5. [syntaxe] erreur introuvable
    Par JohnnyC dans le forum Outils
    Réponses: 2
    Dernier message: 29/04/2004, 10h26

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