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 :

[debutant] erreur de segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1
    Par défaut [debutant] erreur de segmentation
    Bonjour,

    je suis débutante en c et j'ai un problème lors de l'éxécution de mon programme : cela m'affiche erreur de segmentation. J'ai essayé de chercher d'où cela pouvait venir, j'ai trouvé la ligne mais je ne vois pas comment régler le problème. s'il vous plaît aidez-moi!!

    (je précise que mon programme permet d'afficher les données qui correspondant à un nom dans un fichier répertoire)
    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
     
    struct ligne 
    { 
       char *champ[8]; 
    } 
     
    struct ligne ligne; 
     
    void 
    initialisation_struct( ) 
    { 
       size_t cpt=1; 
       char c; 
       int i=0; 
     
       while((c=getchar( ) ) ! = '\n') 
       { 
          if ( c == '\t') 
          { 
             i=0; 
             cpt ++; 
          } 
          else 
          { 
             ligne.champ[cpt][i]=c; /* c'est cette ligne qui pose problème*/ 
             i++; 
          } 
       } 
    } 
     
    void 
    affichernom( char *nom) 
    { 
       initialisation_struct(); 
       while ( ! strcoll (nom, ligne.champ[1]) 
          initialisation_struct(); 
       printf("%s %s %s %s %s %s %s %s\n", nom, ligne.champ[2], ligne.champ[3], ligne.champ[4], ligne.champ[5], ligne.champ[6], ligne.champ[7], ligne.champ[8]); 
    }
    Je sais que dans mon code il y a des erreurs ce n'est qu'une première version.... soyez indulgent s'il vous plaît.
    Merci d'avance

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Code incomplet.
    Code pas dans des balises CODE.
    Code pas indenté.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mystique679
    je suis débutante en c et j'ai un problème lors de l'éxécution de mon programme : cela m'affiche erreur de segmentation.<...>Je sais que dans mon code il y a des erreurs ce n'est qu'une première version.... soyez indulgent s'il vous plaît.
    Etant donné qu'il ne compile pas
    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
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:6: error: two or more data types in declaration of `ligne'
    main.c: In function `initialisation_struct':
    main.c:11: error: `size_t' undeclared (first use in this function)
    main.c:11: error: (Each undeclared identifier is reported only once
    main.c:11: error: for each function it appears in.)
    main.c:11: error: syntax error before "cpt"
    main.c:15: warning: implicit declaration of function `getchar'
    main.c:15: error: syntax error before '!' token
    main.c:20: error: `cpt' undeclared (first use in this function)
    main.c:13: warning: unused variable `i'
    main.c: At top level:
    main.c:22: error: syntax error before "else"
    main.c: In function `affichernom':
    main.c:34: warning: implicit declaration of function `strcoll'
    main.c:35: error: syntax error before "initialisation_struct"
    main.c:36: warning: implicit declaration of function `printf'
    main.c:37:2: warning: no newline at end of file
    Process terminated with status 1 (0 minutes, 1 seconds)
    9 errors, 5 warnings
    je n'ai pas d'erreur de segmentation. Il faut poster ton code, pas des bribes... On ne sait pas ce que tu as oublié...

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct ligne 
    { 
       char *champ[8]; 
    } 
     
    struct ligne ligne;
    .......
    ligne.champ[cpt][i]=c; /* c'est cette ligne qui pose problème*/
    Le champ champ de ligne réserve de la place pour 8 pointeurs sur caractères, pas pour 8 chaînes de caractères. retourne donc un de ces pointeurs, qui n'a pas été initialisé par l'adresse d'un tableau de caractères. essaie donc de trouver le iieme élément d'un tableau qui n'existe pas! -> erreur de segmentation.

    Accessoirement et pour éviter un autre plantage après correction de celui-ci, ne pas oublier de terminer les chaînes de caractères par 0

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    ta structure est mal faite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct
       {
       blablabla
       } NomStructure ;
     
    NomStructure UnElement ;
    Il y a d'autre façon de faire, mais ça marche.

    Ceci :
    est maladroit. Change de nom.

    Ensuite, un segmentation fault vient d'une demande de lecture dans une case mémoire non alloué à ton programme. Donc tu déborde d'un tableau.

    Essai d'utiliser un debuggeur (ddd, xxgdb, gdb, ...).
    Sinon met des printf partout pour voir où est ce que ca plante...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par ToTo13
    Ensuite, un segmentation fault vient d'une demande de lecture dans une case mémoire non alloué à ton programme.
    <mode pointilleux="on">Ou d'écriture ou tout accès non autorisé en général (un "jmp 0" fait l'affaire)</mode>

Discussions similaires

  1. Réponses: 11
    Dernier message: 05/01/2006, 12h55
  2. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 13h58
  3. [Debutant] Erreur "Unhandled event loop exception"
    Par pilz dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 08/12/2004, 15h19
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. [Debutant]erreur lors de la sauvegarde d un code.
    Par Mr_Chut dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/04/2004, 19h42

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