> Bonjour la liste, > Durant mes heures de loisirs ces jours-ci, je fais syst�matiquement les > exercices de programmation en C de Linux mag (� titre de divertissement > :-) comme d'autres font des jeux vid�o re :-) ) > Mais apr�s compilation et �ventuel d�boggage (fautes de frappe) quand je > lance ces programmes j'ai tout aussi syst�matiquement le message : > erreur de segmentation > > Qu'est-ce que cela signifie ? > Comment diagnostiquer l'erreur et la corriger ?
Bonjour je ne pense pas que tu sois sur la bonne liste pour poser ce genre de questions, oriente toi plutot vers des foriis (je trouvais que ca sonnait bien au pluriel comme ca) plutot oriente prog et plus particulierement C. Sinon pour repondre brievement a ton probleme, grosso merdo c est que tu essayes d'ecrire/d'acceder a une zone memoire dont tu n;as pas le droit. Ce genre de prob est tres souvent du a une boucle qui ... boucle trop loin. ou alors tu as un char* ou un int* qui n'est pas malloqu� (man malloc). En fait il y a plein plein de manieres differentes de faire un seg fault et sans le code on peut pas deviner :) Pour "debugger" et voir ou ton application plante, utilise gdb (man gdb). Tu dois compiler avec l'option -g2 (par exemple) Je te conseille egalement de compiler avec l'option -Wall (man gcc) qui te permet d'etre plus "strict" dans ta compilation et afficher des warnings bien utiles qui tu ne verrais pas sinon ex : gcc -Wall -g2 main.c ensuite tu utilises gdb pour "debugger" ton programme. (re man gdb) ca te fait un truc du genre (apres compilation) : > gdb a.out [blablablabla] (gdb) run [blablablalbal] segmentaion fault (gdb) where #0 0x480d7cf6 in vfprintf () from /usr/lib/libc.so.12 #1 0x480c6650 in printf () from /usr/lib/libc.so.12 #2 0x8048928 in main () at toto.c:8 #3 0x8048710 in ___start () (gdb) et la gdb te dit par ou est passe ton programme avant de planter. (dans ce cas on voit que c est printf qui a plante ... mais attention ca veut pas dire que c est printf qui fait planter le programme mais que tu passes n'importe quoi a printf) Heu je vois pas quoi te dire d'autres si ce n'est que ce que j ai dit n'est pas tres clair .... En gros tu as beaucoup de man a ingurgiter : man gcc man gdb man malloc man free (a chaque malloc doit correspondre un free!!!) sinon tu peux egalement essayer de retrouver la ou ton prog plante a l'aide de printf tu mets des printf "intelligeamment" dans ton code en essayant d'entourer la partie du code incrimin� mais c'est moins efficace que gdb. Bonne chance dans ton apprentissage du C ! :) Manu
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft? Rendez-vous sur "http://www.mandrakestore.com"
