double free & warning

Le
PasDeSpam
bonjour,

j'ai deux soucis, que je n'arrive pas a comprendre :(

mon programme c++ est compilé avec gcc 4.2.0 et debuggé avec GNU gdb
6.3.50-20050815 (Apple version gdb-962).

1) au lancement du debuggeur j'ai

run
&"warning: posix_spawn failed, trying execvp, error: 86"
[Switching to process 1629 local thread 0x2d03]
Running…

que signfie ce warning?

dans errno.h
#define EBADARCH 86 /* Bad CPU type in executable */




2) a la fin de l'execution du programme, j'ai un comportement indefini
(1 fois sur 10)

Roxane(1223,0x7fff707bb700) malloc: *** error for object 0x100243180:
double free
*** set a breakpoint in malloc_error_break to debug

en posant le breakpoint et en remontant la pile d'information j'arrive a

#4 0x00005a61 in std::string::_M_rep at basic_string.h:123
#5 0x00005a61 in ~basic_string [inlined] at basic_string.h:472

que puis je conclure?

merci de votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
James Kanze
Le #19342061
On May 15, 1:19 pm, (Bruno Causse) wrote:

j'ai deux soucis, que je n'arrive pas a comprendre :(



mon programme c++ est compilé avec gcc 4.2.0 et debuggé avec GNU gdb
6.3.50-20050815 (Apple version gdb-962).



1) au lancement du debuggeur j'ai



run
&"warning: posix_spawn failed, trying execvp, error: 86n"
[Switching to process 1629 local thread 0x2d03]
Running…



que signfie ce warning?



dans errno.h
#define EBADARCH 86 /* Bad CPU type in executable */



Une incompatibilité entre la compilation de gdb et la version de
ton OS ? posix_spawn n'a été ajouté qu'en Unix 03 (Posix
1003.1,2004) : dans la pratique, beaucoup de systèmes courants
ne l'implémentent pas encore. (Solaris n'a posix_spawn que
depuis Solaris 10, par exemple. Alors que dans l'industrie, on
trouve encore beaucoup de Solaris 8 et 9.)

(Pour aller plus loin, il faudrait regarder les sources de gdb.
A priori, le seul processus fils auquel je m'attendrais dans
gdb, c'est le processus à débugger. Et je ne vois pas trop
comment on utiliserait posix_spawn pour le démarrer, étant donné
qu'il faut bien que le fils appelle ptrace entre le fork et le
exec, afin que le parent puisse intervenir immédiatement après
l'exec pour mettre les points d'arrêt.)

2) a la fin de l'execution du programme, j'ai un comportement indefini
(1 fois sur 10)



Roxane(1223,0x7fff707bb700) malloc: *** error for object 0x100243180:
double free
*** set a breakpoint in malloc_error_break to debug



en posant le breakpoint et en remontant la pile d'information
j'arrive a



#4 0x00005a61 in std::string::_M_rep at basic_string.h:123
#5 0x00005a61 in ~basic_string [inlined] at basic_string.h:472



que puis je conclure?



Que tu as un problème quelque part:-). Sérieusement, c'est
difficile à dire comme ça ; probablement, tu te sers quelque
part de la mémoire après l'avoir deletée. Ensuite, std::string
l'alloue, puis tu le deletes une deuxième fois, et quand
std::string le delete, tu as l'erreur ci-dessus.

Essayer d'exécuter avec valgrind, Purify, ou quelque chose du
genre.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Publicité
Poster une réponse
Anonyme