Bonjour,
Toujours dans ma quête d’apprentissage du C, je veux remplir de caractères un tableaux a 2 dimensions. J'ai un fichier et pour chaque ligne du fichier je stocke la chaîne de caractère dans une case du tableau.
Mon problème est le suivant : j'ai un "Segmentation Fault" sur la dernière ligne du tableau, quand j'ai 25 lignes à copier, j'en copie 24 et la dernière provoque une jolie "Segmentation Fault". Quand j'ai 4 lignes, j'en copie 3 et la dernière provoque une jolie "Segmentation Fault", etc.
Un exemple sera peut-être plus parlant :
- le fichier que je veux copier.
- le résultat d’exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
54 yuay jkja oiyi aoiu
Et voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 />./BSQ exemple yuay jkja oiyi Erreur de segmentation
- le main :
- fonction de remplissage :
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 int main(int argc, char **argv) { int fd; int ret; char *buffer; buffer = malloc(sizeof(char)); fd = open(argv[1], O_RDONLY); if (fd == -1) { my_putstr("open error"); return (1); } ret = read(fd, buffer, buffer); pos_origin(buffer); close(fd); return (0); }
Merci d'avance à ceux qui prendront le temps de me lire et de m'aider.
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 int count_line(char *str) { int i; int nbr_line; i = 0; nbr_line = 0; while (str[i]) { if (str[i] == '\n') nbr_line = nbr_line + 1; i = i + 1; } return (nbr_line); } int pos_origin(char *buffer) { int i; int n; int v; int y; int nbr_line; char **tab; y = 2; i = 0; n = 0; v = 0; nbr_line = count_line(buffer); tab = malloc(sizeof(char *)); while (n < nbr_line) { tab[n] = malloc(sizeof(char)); n = n + 1; } while (y != '\0') { while (buffer[y] != '\n') { tab[v][i] = buffer[y]; y = y + 1; i = i + 1; } my_printf("%s\n", tab[v]); v = v + 1; y = y + 1; i = 0; } free(tab); free(*tab); }
Partager