Hello!
Bon voila, j'ai en ce moment le genre de problème un peu mystérieux pour moi, enfin en tout cas difficile a régler. Récemment j'ai posté un sujet similaire, sauf que l'erreur s'est en fait révélée assez bidon...
Bref mon problème en ce moment est que je doit avoir dans mon programme une erreur qui aboutit a la lecture ou a l'écriture dans des endroits de la mémoire ou j'ai pas le droit, et un segfault apparait donc naturellement a divers moments..
Ma question est simple: y'a t-il un moyen de stopper le programme, ou de signaler l'instruction exacte, au moment précis ou il y a un quelconque dépassement?
----
Je décrit brièvement le comportement quand même, le but étant simplement de bien poser problème et non que vous m'aidiez a débugger (le programme étant trop long, et je n'ai pour le moment aucune idée de l'endroit qui peut poser problème). Ma fonction:
En gros, si je met le deuxième fprintf en commentaire, j'ai droit a un segfault avec l'affisage suivant (gdb):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void write_pdb_atoms(FILE *f, s_atm *atoms, int natoms) { s_atm *atom = NULL ; int i ; for(i = 0 ; i < natoms ; i++) { atom = atoms + i ; fprintf(stdout, ">> Atom %p: %d vs %d\n", atom, i, natoms) ; fflush(stdout) ; fprintf(stdout, "%s %d \n", atom->type, atom->id) ; write_pdb_atom_line(f, atom->type, atom->id); } }
Si en revanche j'execute bien le deuxième affichage, pas de soucis, pas de segfault...(...)
>> Atom 0x81329c8: 1738 vs 2973
>> Atom 0x36333830: 14388 vs 2973 // Notez que la valeur de i change complètement... de 1738 a 14388
Program received signal SIGSEGV, Segmentation fault.
write_pdb_atoms (f=0x80d6088, atoms=0x810d458, natoms=2973) at src/writepdb.c:106
106 write_pdb_atom_line(f, atom->type, atom->id)
(gdb) where
#0 write_pdb_atoms (f=0x80d6088, atoms=0x810d458, natoms=2973) at src/writepdb.c:106
Merci d'avance
Partager