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 :

Programme qui plante : seg fault


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut Programme qui plante : seg fault
    Bonjour,

    j'ai mon programme qui s'est planté mais je n'arrive pas à corriger
    Voici ce que donne gdb
    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
    gdb arbre
    GNU gdb 6.3-debian
    Copyright 2004 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) r
    Starting program: /home/premium/v0.2/arbre
    [Thread debugging using libthread_db enabled]
    [New Thread -1213376832 (LWP 14398)]
    Debut du parsing
    Parsing reussi
    Debut chargement de l'image
    Chargement de l'image reussi
    Debut creation de l'arbre
    Creation de l'arbre reussie
    nw(0,0,114) sw(0,1024,113) se(1024,1024,173) ne(1024,0,143) type:-1
     
    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1213376832 (LWP 14398)]
    rechercheBord (feuille=0x0, sommets=0x804c56c, provenance=1) at vertexarray.c:138
    138           if(feuille->NW) rechercheBord(feuille->NW, sommets, provenance);
    (gdb) bt
    #0  rechercheBord (feuille=0x0, sommets=0x804c56c, provenance=1) at vertexarray.c:138
    #1  0x08049d5c in calculBordFeuilleDir (feuille=0x804c518, dir=1) at vertexarray.c:354
    #2  0x08049da1 in calculBordFeuille (feuille=0x804c518) at vertexarray.c:196
    #3  0x08049dde in parcours (feuille=0x804c4b0) at vertexarray.c:178
    #4  0x08049dde in parcours (feuille=0x804c448) at vertexarray.c:178
    #5  0x08049dde in parcours (feuille=0x804c3e0) at vertexarray.c:178
    #6  0x08049dde in parcours (feuille=0x804c378) at vertexarray.c:178
    #7  0x08049dde in parcours (feuille=0x804c310) at vertexarray.c:178
    #8  0x08049dde in parcours (feuille=0x804c2a8) at vertexarray.c:178
    #9  0x08049dde in parcours (feuille=0x804c240) at vertexarray.c:178
    #10 0x08049dde in parcours (feuille=0x804c1d8) at vertexarray.c:178
    #11 0x08049dde in parcours (feuille=0x804c170) at vertexarray.c:178
    #12 0x08049e79 in main () at vertexarray.c:383

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Au hasard, comme ça, je dirais que feuille vaut NULL.
    Donc feuille->NW provoque une erreur de segmentation...

    Si tu regardes ton code, tu remarqueras que :
    - ton premier IF teste si feuille n'est pas NULL,
    - comme c'est le cas, on n'y entre pas, et on passe directement à "if ((provenance & D_NORD) == D_NORD)", puis à "if(feuille->NW) ..."

    Donc, si feuille vaut NULL, tu testes la valeur de feuille->NW...

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par zooro
    Au hasard, comme ça, je dirais que feuille vaut NULL.
    Donc feuille->NW provoque une erreur de segmentation...

    Si tu regardes ton code, tu remarqueras que :
    - ton premier IF teste si feuille n'est pas NULL,
    - comme c'est le cas, on n'y entre pas, et on passe directement à "if ((provenance & D_NORD) == D_NORD)", puis à "if(feuille->NW) ..."

    Donc, si feuille vaut NULL, tu testes la valeur de feuille->NW...
    J'ai pas compris.
    C'est quel endroit qu'il faut modifier ?

  4. #4
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Quand tu utilises feuille->..., il faut TOUJOURS t'assurer d'abord que feuille n'est pas NULL. Sinon, tu auras une erreur de segmentation.

    Donc tu peux faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((feuille != NULL) && (feuille->NW != NULL)) { ... }
    Mais dans ton exemple, je pense que ta fonction est appelée avec feuille=NULL, tu peux sortir tout de suite.
    Je ferais alors quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void rechercheBord(
    		   t_cellule *feuille,
    		   t_tabSommet *sommets,
    		   int provenance)
    {
      if (feuille == NULL)
        return;
     
      ...
    }

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Je n'ai plus de seg fault suite aux modifs que tu as indiqué.
    Le code compile et se lance mais il reste un gros souci.
    Le programme s'arrete par manque de processus

  6. #6
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Premium
    Le programme s'arrete par manque de processus
    Ca ne me parle pas du tout, là !
    Quel est le message affiché ?

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

Discussions similaires

  1. Programme qui plante quand je passe une string.
    Par z980x dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/01/2009, 00h40
  2. programme qui plante
    Par warubi dans le forum C++
    Réponses: 35
    Dernier message: 04/02/2007, 10h57
  3. programme qui plante. chercher/remplacer dans des fichiers.
    Par [Hugo] dans le forum Général Python
    Réponses: 2
    Dernier message: 31/10/2006, 17h10
  4. Faire un programme qui plante et noter le plantage
    Par cedricgirard dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 16h36
  5. Programme qui plante
    Par harris_macken dans le forum C++
    Réponses: 1
    Dernier message: 22/05/2005, 23h50

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