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 :

Segmentation fault à la lecture d'un caractère


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 43
    Par défaut Segmentation fault à la lecture d'un caractère
    Bonsoir, je travaille actuellemnt sur le jeu du pendu et j'avoue que je n'y comprends plus rien. A chaque fois que j'excécute mon programme, apres avoir entrer la lettre qu'on m'a demandé dans la fonction lirecaractere(), le programme affiche segmention fault core dumped. Je vous montre la partie main du programme car je me doute que le probleme se trouve là-bas.


    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include "pendu.h"
     
     
    int main()
    {
        printf("*****Bienvenue dans le jeu du pendu***** \n   Saurez-vous trouver le mot cache?\n");
     
     
     
        char malettre; //correspond à la lettre que l'utilisateur va entrer
        int i;
        int tab_car[TAILLE_MAX]; //correspond au tableau contennant les differentes lettres du mot caché
     
     
     
        FILE* fichier = NULL;
        fichier=fopen("/home/fagnan/Documents/Pendu/Pendu.txt", "r");
     
        if(fichier!=NULL)
        {
        malettre=lirecaractere();
     
        do
        {
            for(i=0;i<TAILLE_MAX;i++)
            {
                    tab_car[i]= fgetc(fichier);
            }
     
     
        }while(fgetc(fichier)!=EOF);
     
     
             for(i=0;i<6;i++)
                {
                    comparercaractere(malettre,'tab_car[i]');
                }
     
            fclose(fichier);
     
        }
     
        else{printf("Impossible de trouver le fichier");
     
        }
     
     
     
    }
    Merci.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 102
    Billets dans le blog
    146
    Par défaut
    Bonjour,

    Dans ce genre de cas, pour mieux comprendre l'erreur, il faut utiliser un débogueur. Voici un tutoriel expliquant comment le prendre en main, car c'est le deuxième ami du programmer (le premier étant le compilateur).

    Je vous montre la partie main du programme car je me doute que le probleme se trouve là-bas.
    Dommage, car je trouve que vous n'avez pas assez d'arguments pour une telle supposition.

    Cette ligne est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comparercaractere(malettre,'tab_car[i]');
    Je suppose que la version correcte devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comparercaractere(malettre,tab_car[i]);
    afin de comparer avec le contenu du tableau et non avec une chaîne contenant le texte "tab_car[i]".
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Bonjour,

    je rajouterai en plus de LittleWhite que ta boucle même si elle ne pose peut être pas de problème dans ton cas est un peu tordue dans le sens où si ton fichier est vide tu ne t'en rendra compte qu'a la fin et il y aura 'EOF' dans tout les caractères de ton tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        do
        {
            for(i=0;i<TAILLE_MAX;i++)
            {
                    tab_car[i]= fgetc(fichier);
            }
     
     
        }while(fgetc(fichier)!=EOF);
    Tu pourrais tout mettre dans une seule boucle for ou while.

    avec while:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int car;
    i=0;
    while( (car = fgetc(fichier) )!= EOF && i < TAILLE_MAX )
    {
      tab_car[i] = car;
      i++;
    }
    avec for:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int car;
    for(i=0; (car = fgetc(fichier)) != EOF && i < TAILLE_MAX;i++ )
    {
      tab_car[i] = car;
    }

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pjlan Voir le message
    je rajouterai en plus de LittleWhite que ta boucle même si elle ne pose peut être pas de problème dans ton cas est un peu tordue dans le sens où si ton fichier est vide tu ne t'en rendra compte qu'a la fin et il y aura 'EOF' dans tout les caractères de ton tableau.
    Tu n'as pas bien lu. Sa lecture foirera même si le fichier n'est pas vide à cause de la boucle interne qui lit quoi qu'il arrive TAILLE_MAX caractères.
    Ainsi seule la dernière itération de la boucle while() sera conservée dans tab_car pour le meilleur et pour le pire.

    Sinon ta solution est effectivement bien plus correcte
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. segmentation fault (core dumped)
    Par domdom974 dans le forum Fortran
    Réponses: 2
    Dernier message: 04/08/2009, 09h07
  2. [ASE 15.0.3] Segmentation Fault - core dumped
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 04/06/2009, 10h55
  3. segmentation fault (core dumped)
    Par miamiam dans le forum Débuter
    Réponses: 3
    Dernier message: 26/11/2008, 11h46
  4. Réponses: 1
    Dernier message: 10/12/2006, 21h37
  5. Segmentation fault (core dumped)
    Par Battosaiii dans le forum C
    Réponses: 13
    Dernier message: 25/11/2005, 18h36

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