Voilà un code que j'ai déjà posté plusieurs fois ici.
J'ai essayé d'améliorer en suivant vos conseils, c'est surement encore
imparfait.
A la fin, dans le main, j'ai voulu encadré mes trois printf par des
lignes comme cela : printf ("---------------------------------------\n);
pour faire une sorte de cadre. Et bien, lorsque je lance le programme et
que je choisis 't', erreur de segmentation alors que sans ces ligens
(apparament sans aucun intéret), ça marche parfaitement.
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
-- Thibault Volpert
Olivier Aumage
Triaxx writes:
void Lecture (int grille[]) { FILE *fichier;
char tmp[2], c;
[snip]
while((c = fgetc (fichier)) != EOF) { if(c != '-' && c != 'n') [snip] else { i = 0;
grille[(atoi (tmp))-1]++;
tmp[0] = 0; tmp[1] = 0; }
} }
[snip]
}
La fonction 'atoi' attend une chaîne de caractères, donc une suite de 'char' terminée par un caractère nul (' '). Dans l'extrait de ton exemple ci-dessus, à la première itération, le tableau 'tmp' n'est pas initialisé donc la chaîne ne contient probablement pas de 0 terminal.
C'est une cause possible de ton problème.
De plus, ton programme contient une faille de sécurité car tu ne contrôle pas que la variable 'i' ne dépasse pas la capacité du tableau 'tmp'.
-- Olivier
Triaxx <triaxx@corporation.net> writes:
void Lecture (int grille[])
{
FILE *fichier;
char tmp[2],
c;
[snip]
while((c = fgetc (fichier)) != EOF)
{
if(c != '-' && c != 'n')
[snip]
else
{
i = 0;
grille[(atoi (tmp))-1]++;
tmp[0] = 0;
tmp[1] = 0;
}
}
}
[snip]
}
La fonction 'atoi' attend une chaîne de caractères, donc une suite de
'char' terminée par un caractère nul (' '). Dans l'extrait de ton
exemple ci-dessus, à la première itération, le tableau 'tmp' n'est pas
initialisé donc la chaîne ne contient probablement pas de 0 terminal.
C'est une cause possible de ton problème.
De plus, ton programme contient une faille de sécurité car tu ne
contrôle pas que la variable 'i' ne dépasse pas la capacité du tableau
'tmp'.
while((c = fgetc (fichier)) != EOF) { if(c != '-' && c != 'n') [snip] else { i = 0;
grille[(atoi (tmp))-1]++;
tmp[0] = 0; tmp[1] = 0; }
} }
[snip]
}
La fonction 'atoi' attend une chaîne de caractères, donc une suite de 'char' terminée par un caractère nul (' '). Dans l'extrait de ton exemple ci-dessus, à la première itération, le tableau 'tmp' n'est pas initialisé donc la chaîne ne contient probablement pas de 0 terminal.
C'est une cause possible de ton problème.
De plus, ton programme contient une faille de sécurité car tu ne contrôle pas que la variable 'i' ne dépasse pas la capacité du tableau 'tmp'.
-- Olivier
Emmanuel Delahaye
In 'fr.comp.lang.c', thibault volpert wrote:
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', thibault volpert <noaddress@stop.invalid> wrote:
Dans la fct Lecture() tu fermes le fichier meme si
fichier==NULL.
C'est pas un problème.
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
thibault volpert
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', thibault volpert wrote:
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Cela me semblerai logique puisque fopen() est succeptible de renvoyer un pointeur NULL. Cela cree un segmetation fault avec gcc sur Linux, Du coup j'ai pris l'habitude de ne jamais faire de fclose() si le fopen() a echoue. J'ai pas raison ?
-- Thibault Volpert
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', thibault volpert <noaddress@stop.invalid> wrote:
Dans la fct Lecture() tu fermes le fichier meme si
fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Cela me semblerai logique puisque fopen()
est succeptible de renvoyer un pointeur NULL.
Cela cree un segmetation fault avec gcc
sur Linux, Du coup j'ai pris l'habitude de
ne jamais faire de fclose() si le fopen() a echoue.
J'ai pas raison ?
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Cela me semblerai logique puisque fopen() est succeptible de renvoyer un pointeur NULL. Cela cree un segmetation fault avec gcc sur Linux, Du coup j'ai pris l'habitude de ne jamais faire de fclose() si le fopen() a echoue. J'ai pas raison ?
-- Thibault Volpert
Éric Lévénez
Le 31/07/03 11:10, dans , « thibault volpert » a écrit :
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', thibault volpert wrote:
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Non. Il confond avec free.
Cela me semblerai logique puisque fopen() est succeptible de renvoyer un pointeur NULL. Cela cree un segmetation fault avec gcc sur Linux, Du coup j'ai pris l'habitude de ne jamais faire de fclose() si le fopen() a echoue. J'ai pas raison ?
Oui, totalement.
-- Éric Lévénez -- <http://www.levenez.com> Unix is not only an OS, it's a way of life.
Le 31/07/03 11:10, dans <3F28DCF5.E168973D@stop.invalid>, « thibault
volpert » <noaddress@stop.invalid> a écrit :
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', thibault volpert <noaddress@stop.invalid> wrote:
Dans la fct Lecture() tu fermes le fichier meme si
fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Non. Il confond avec free.
Cela me semblerai logique puisque fopen()
est succeptible de renvoyer un pointeur NULL.
Cela cree un segmetation fault avec gcc
sur Linux, Du coup j'ai pris l'habitude de
ne jamais faire de fclose() si le fopen() a echoue.
J'ai pas raison ?
Oui, totalement.
--
Éric Lévénez -- <http://www.levenez.com>
Unix is not only an OS, it's a way of life.
Le 31/07/03 11:10, dans , « thibault volpert » a écrit :
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', thibault volpert wrote:
Dans la fct Lecture() tu fermes le fichier meme si fichier==NULL.
C'est pas un problème.
Tu veux dire que fclose(NULL) est legal ?
Non. Il confond avec free.
Cela me semblerai logique puisque fopen() est succeptible de renvoyer un pointeur NULL. Cela cree un segmetation fault avec gcc sur Linux, Du coup j'ai pris l'habitude de ne jamais faire de fclose() si le fopen() a echoue. J'ai pas raison ?
Oui, totalement.
-- Éric Lévénez -- <http://www.levenez.com> Unix is not only an OS, it's a way of life.
Emmanuel Delahaye
In 'fr.comp.lang.c', Éric Lévénez wrote:
Tu veux dire que fclose(NULL) est legal ?
Non. Il confond avec free.
Exact.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', Éric Lévénez <eric@levenez.com> wrote:
Tu veux dire que fclose(NULL) est legal ?
Non. Il confond avec free.
Exact.
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/