utilisation pointeurs et structures
Bonjour,
Voila plusieurs fois que j'écris des fonctions qui mènent au plantage peu de temps APRES leur execution (pas directement pendant l'exécution des lignes suspectées). Pour l'exemple suivant, j'obtiens le message :
Code:
*** glibc detected *** escargot: corrupted double-linked list: 0x00024010 ***
Ci après, un extrait de mon programme.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| int main(int argc, char **argv){
...
TypeJeu Jeu;
initJeuWithArg(&Jeu, argc, argv);
...
#ifndef PLANTAGE // cas qui est fonctionnel
sprintf(msg, DEFAULT_DISPLAY_MSG);
char tmp2=strlen(msg);
Jeu.pMessageAttente=malloc(sizeof(char)*(tmp2+1));
strcpy(Jeu.pMessageAttente, msg);
#endif
...
}
void initJeuWithArg(TypeJeu* pJeu, int argc, char **argv){
initJeu(pJeu);
...
}
void initJeu(TypeJeu* pJeu){
...
#ifdef PLANTAGE // cas qui mène au plantage
sprintf(msg, DEFAULT_DISPLAY_MSG);
char tmp=strlen(msg);
pJeu->pMessageAttente=malloc(sizeof(char)*(tmp+1));
strcpy(pJeu->pMessageAttente, msg);
#else
pJeu->pMessageAttente=NULL;
#endif
...
}
typedef struct
{
...
char* pMessageAttente;
...
}
TypeJeu; |
Je suppute une mauvaise utilisation des pointeurs et des malloc, mais j'ai beau chercher je ne vois pas où. Je tombe régulièrement sur le problème lors de l'écriture de nouvelles fonctions, donc il est peut-être temps que j'ouvre les yeux...
Pouvez-vous m'aider ?
Salutations,
Vincent
utilisation pointeurs et structures
Bon j’admets que le problème puisse venir d'ailleurs que la fonction présentée. Dans le cas que j'ai présenté comme posant problème, j'ai ajouté des printf un peu partout et le programme fonctionne. Quand je retire ces derniers à l'aide d'une macro spécifique, ça plante comme auparavant.
Je suspecte un problème dans l'utilisation de libxml2. Quel outil dois-je utiliser pour voir à quoi correspond l'adresse 0x00024010
Code:
*** glibc detected *** escargot: corrupted double-linked list: 0x00024010 ***
Par rapport à d'autres traces que j'ai ajouté, le programme plante dans l'appel de xmlXPathEvalExpression().