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

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    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 éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    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...
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    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 éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    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;
     
      ...
    }
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    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 éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    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é ?
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  7. #7
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    Le programme s'arrete par manque de processus
    alors la je sais pas si je vais passé pour un novice mais qu'est ce que tu appele manque de processus!
    Rien ne se perd, rien ne se crée, tout se transforme

    ------- -------

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Jérémy Lefevre
    alors la je sais pas si je vais passé pour un novice mais qu'est ce que tu appele manque de processus!
    En general, il y a une limite maximale au nombre de processus qu'un noyau peut gerer. Le noyau linux 2.6 peut gerer au maximum 32000 processus, par exemple. Par contre, je ne sais pas pourquoi Premium rencontre cette erreur (un script faux qui lance trop de processus, peut-etre)?

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par DaZumba
    En general, il y a une limite maximale au nombre de processus qu'un noyau peut gerer. Le noyau linux 2.6 peut gerer au maximum 32000 processus, par exemple. Par contre, je ne sais pas pourquoi Premium rencontre cette erreur (un script faux qui lance trop de processus, peut-etre)?
    J'y avais pensé aussi, mais comme je n'avais pas vu de fork dans son code...
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Tu es sûr que c'est "manque de processus", et pas "manque de mémoire", ou "plus de place dans la pile" ?
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zooro
    Tu es sûr que c'est "manque de processus", et pas "manque de mémoire", ou "plus de place dans la pile" ?
    Sil il s'est trompé à ce point là, c'est pas écran qu'il a c'est un champ de guano...
    Pas de Wi-Fi à la maison : CPL

+ 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