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";

Répondre à