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 :
*** glibc detected *** escargot: corrupted double-linked list: 0x00024010 ***
Ci après, un extrait de mon programme.
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
Partager