Probleme "segment fault" [resolu(erreur de noob)] - C - Programmation
Marsh Posté le 18-03-2008 à 22:19:57
Sur quel système es-tu ?
Si tu es sous linux, utilise le debugger gdb pour trouver l'erreur. Il faut bien sur compiler son programme avec les symboles de debug (option -g de gcc).
Marsh Posté le 18-03-2008 à 22:21:56
Code :
|
Encore une mauvaise utilisation de feof !
Il faut faire des fgets tant qu'il ne renvoie pas NULL !
Marsh Posté le 18-03-2008 à 22:33:00
Code :
|
Utilise une seule norme pour le nom de tes macros. Ce sera plus clair pour les futurs lecteurs de ton programme ensuite (futur lecteur, ca peut etre toi dans 3 semaines, un programme ca s'oublie vite).
Et a propos de relecture, corrige ton indentation aussi. Ca a l'air inutile, d'avoir une indentation propre, mais je peux t'assurer que c'est au contraire essentiel : ca permet une relecture du code claire, et donc ca te donne une meilleure maintenabilite.
Code :
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHH !!!
Variables globales == c'est mal (hormis un ou deux cas particulier, ce qui n'est pas le cas ici).
La raison est simple : sans notion de portee, si ton programme se complexifie tu n'as plus moyen de connaitre les impacts si tu modifies l'une de ces variables.
Code :
|
Non. Si fopen() echoue, NULL est retourne. Et tenter d'afficher NULL, a priori, ca se termine en plantage.
Code :
|
Non plus. Lis la documentation sur feof() : ca sert a determiner la raison pour laquelle une lecture de flux a echoue.
Et si la lecture a echoue a cause d'une erreur quelconque (et non a cause d'une fin de fichier), feof() retournera toujours 0, ce sera ferror() qui retournera 1.
Bref, il faut tester ici le retour de fgets(), et seulement ensuite, si tu en as envie, tu peux utilser feof() pour savoir si la lecture s'est termine parce que tu es arrive en fin de flux.
Code :
|
Ca compile, ca ? Sans erreur ? Impossible : ta fonction est censee retourner une valeur de type "laby", et il n'y a aucun return a la fin de ta fonction.
Code :
|
Nah, utilise fgetc() plutot. La fonction scanf() n'est pas aussi simple que ca pour pouvoir l'utiliser de maniere sure.
Bon, j'ai pas le temps de lire le reste, normalement tu devrais avoir pas mal de clefs pour corriger ton programme.
Marsh Posté le 18-03-2008 à 22:37:28
je vais essayer de corriger tout ca...
je vous tiens au courant
Marsh Posté le 18-03-2008 à 22:49:58
g justement un probleme avec le fopen car def renvoie null,mais je n'arrive pas a le resoudre...
Marsh Posté le 18-03-2008 à 23:03:20
Code :
|
que dois-je faire alors...??
Marsh Posté le 18-03-2008 à 23:11:58
je viens de trouver un truc desesperement et justement en verifiant l'emplacement du fichier,j'avais mis /Bureau/projetc/config.txt au lieu de /home/amaury/Bureau/projetc/config.txt
Resultat:plus de segment fault^^
merci pour votre aide,a présent je m'occupe du reste!!!
Marsh Posté le 18-03-2008 à 23:37:53
j'ai parlé trop vite...
aprés avoir modifié l'emplacement du fichier,j'arrive jusqu'a la question qui demande le choix de deplacement(nord,sud,est ou ouest),et une fois que je rentre mon choix,revoila mon segment fault...
sniff
Marsh Posté le 19-03-2008 à 09:22:34
On t'a déjà dit de ne pas utiliser scanf, et si tu l'utilises fais le correctement.
scanf("%c",&choix);
Mais de toute façoàn tu auras des problèmes ailleurs.
Pour toutes les saisies humaines il FAUT faire fgets(buf, sizeof buf, stdin).
Ensuite tu étudies la saisie.
Marsh Posté le 18-03-2008 à 22:10:49
Bonsoir a tous!
voila dans le cadre d'un mini projet en language C,je developpe un programme qui prend le principe d'un labyrinthe.
J'ai programmé la majeur partie du programme,et aucune erreur a la compilation.
seulement a l'execution,pas moyen d'executer,et on me renvoie un "segment fault"...
j'ai demandé l'avis d'un ami plutôt calé en programmation,mais pas de solution trouvée.
Selon lui,l'erreur viendrait d'une utilisation d'un fopen .
je fais donc appel a vous...
Faut il que je mette le code...??
sans,je pense que vous auriez du mal a m'aider...
d'avance,merci pour votre aide...
elmoricq-edit : balises codes...
Message édité par manubestofplus le 18-03-2008 à 23:22:35