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é.