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 :

[Erreur de segmentation] Pourquoi ?


Sujet :

C

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut [Erreur de segmentation] Pourquoi ?
    Bonjour, je voudrai faire un programme qui compte le nombre d'occurence
    de chaque code octal dans un fichier texte. J'ai écrit le programme, mais ça ne marche pas très bien. J'ai une erreur de segmentation à un endroit désigné par le commentaire.

    En fait, j'ai donc un tableau de chaine de caracteres, et quand je veux l'acceder, ça me donne une erreur de segmentation. Je ne comprends pas pourquoi.

    Voilà mon code :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_LENGTH 200
     
    int main(void)
    {             
        /* declarations */
        FILE * f_p ;      
     
        unsigned long tab_elem[256] ;
     
        char ** file_buffer ;
        void * test_p ;      
     
        unsigned long i , j , num_of_lines ;
        unsigned char char_index ;          
     
        /* ouverture du fichier */
        if( (f_p = fopen("la_fontaine.txt" , "r" )) == NULL ){
            puts("fichier introuvable") ;                     
            return EXIT_FAILURE ;                             
        }                                                     
     
        /* initialisation du tableau qui compte le nombre d'occurences */
        for ( i = 0 ; i<256 ; i++ ) {                                    
            tab_elem[i]=0 ;                                              
        }
     
        /* lecture du fichier et stockage dans un tableau de chaines
         * de caracteres */
        i = -1 ;
        do {
            i +=1 ;
            file_buffer[i] = malloc( MAX_LENGTH*sizeof(**file_buffer) ) ;
            if (file_buffer[i] == NULL) {
                puts("erreur d'allocation memoire") ;
                return EXIT_FAILURE ;
            } else {
                file_buffer[i] = fgets(file_buffer[i], MAX_LENGTH, f_p ) ;
                printf("la ligne %lu est %s",i,file_buffer[i]);
            }
        } while (  file_buffer[i] != NULL ) ;
     
        num_of_lines = i ;
        printf("Le nombre de ligne est %lu\n", num_of_lines ) ;
     
        /* erreur de segmentation */
        for ( i=0 ; i< num_of_lines ; i++ ) {
            j = 0 ;
            while (file_buffer[i][j] != '\0'){
                char_index = (unsigned char)file_buffer[i][j] ;
                tab_elem[char_index] += 1 ;
                printf("caractere %c detecte", file_buffer[i][j] ) ;
                j += 1 ;
            }
            printf("%lu caracteres dans la ligne %lu\n",j,i ) ;
        }
        /* affichage du nombre d'occurence de chaque lettre */
        for (i = 0 ; i< 256 ; i++ ) {
            printf("caractere %c, %lu occurences\n", (char)i , tab_elem[i] ) ;
        }
        return EXIT_SUCCESS ;
    }
    EDITION : mon pointeur file_buffer etait juste reste non alloué, d'où l'erreur de segmentation. Désolé.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    file_buffer n'est pas initialisé.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/04/2015, 09h54
  2. Réponses: 4
    Dernier message: 28/03/2006, 22h52
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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