Bonjour à tous.
Programmant assez peu, je viens juste de découvrir ce forum à l'ambiance visiblement sympa. Je me permets d'en abuser d'entrée de jeu pour poser une question au sujet d'une erreur qui m'est retournée lors d'un malloc().
En lançant un tous petit programme en cours d'écriture, je me prends un
*** glibc detected *** ./recueils: malloc(): memory corruption: 0x0830c8e0 ***
suivi d'une trace de la pile et d'un plan de la mémoire.
L'adresse donnée correspond à une zone du "heap".
J'ai lu sur le net que ce genre de messages peut apparaître lorsqu'on essaye de libérer deux fois la même zone mémoire par exemple.
Après suivi avec un outil de debuggage, il s'avère que l'appel qui produit cette erreur est un malloc tout simple. CE malloc précis a déjà été exécuté plusieurs fois dans le déroulement du programme ; il crée un élément de liste chaînée simple (ne pas se laisser abuser par le "tree" dans le nom de structure).
Je ne comprends pas pourquoi l'appel fonctionne plusieurs fois puis d'un coup il plante. Et pourquoi je ne reçois pas simplement un NULL de la part de malloc, que je puisse gérer proprement.
Voici le code qui merdouille. Le malloc est au début, facile à voir.
1 2 3 4 5 6 7 8 9 10 11 12 13
| dirTreeElement *dirTreeNew(void)
{
dirTreeElement *result;
result = malloc(sizeof(dirTreeElement));
if(result != NULL)
{
result->next = NULL;
result->humanName = NULL;
result->fullPath = NULL;
result->type = BOOKLET_NONE;
}
return result;
} |
Le type est défini ainsi :
1 2 3 4 5 6
| typedef struct{
void *next;
char * humanName;
char * fullPath;
int type;
} dirTreeElement; |
Je ne comprends pas ce que je fais de travers.
Pour info, ce bout de code fait partie de la partie "utile" d'un tout petit utilitaire avec une interface GTK. Je ne sais pas si la présence de GTK a des effets secondaires ; ça m'étonnerait mais on ne sait jamais...
Je vous remercie pour toute info ou lien qui pourrait m'aider à comprendre ce qui arrive.
AFKLM
Partager