En r�ponse � Xc0r <[EMAIL PROTECTED]>: > This is a multi-part message in MIME format... > > ------------=_1046976875-937-400 > > > 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 > > > > > ------------=_1046976875-937-400 > Content-Type: text/plain; name="message.footer" > Content-Disposition: inline; filename="message.footer" > Content-Transfer-Encoding: 8bit > > Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft? > Rendez-vous sur "http://www.mandrakestore.com" > > ------------=_1046976875-937-400-- >
Il y a en effet de fortes chances que cela vienne d'un probl�me d'allocation de pointeur. Il faut v�rifier les allocations de m�moire de tableaux, les parcours dans une boucle et aussi les copies de cha�nes dans un espace r�serv� trop petit. Il faut aussi, lorsqu'on copie le code d'un mag, bien regarder la syntaxe, genre un * de redirection ou de d�finition de pointeur qui manque et aussi les paragraphes genre voila ce qu'il ne faut pas faire. Aussi, v�rifie les �ventuels param�tres de compilation sp�cifiant un mod�le de m�moire. C'est de moins en moins utilis� mais on trouve encore qqs optimisations pour faire du code rapide et compact sur des mod�les small. Attention aussi aux fichiers inclus (justement � cause de �a), un mem.h c'est pas la m�me chose qu'un malloc.h (si mes souvenirs sont bons...). C'est vrai aussi que gdb �a marche du tonnerre mais c'est pas tr�s convivial. M�me si dans 99% des cas, �a te fait pointer illico sur le code incrimin�. Dans tout �tat de cause, si c'est � cause d'une boucle ou d'un pointeur calcul�, la complexit� reste l�. D'o� l'usage d'un outil comprenant un debugger int�gr� qui permet de parcourir le code. Mais l�, je ne connais pas trop. KDevelop peut- �tre? Linuxement Olivier BOISSE e-mail: [EMAIL PROTECTED] site: oboisse.free.fr
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft? Rendez-vous sur "http://www.mandrakestore.com"
