Remplissage de tableaux à 2 dimensions
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.
Code:
1 2 3 4 5
| 4
yuay
jkja
oiyi
aoiu |
- le résultat d’exécution.
Code:
1 2 3 4 5
| />./BSQ exemple
yuay
jkja
oiyi
Erreur de segmentation |
Et voici le code :
- le main :
Code:
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);
} |
- fonction de remplissage :
Code:
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);
} |
Merci d'avance à ceux qui prendront le temps de me lire et de m'aider.