Bonjour,

Je suis sur une fonction de liberation de memoire d'apres une allocation que j'ai faite (allocation dynamique d'une structure).

Voici l'appel à ma fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
FOS_Menu_menubar_destroy (&desktop_menubar);
et voici l'implémentation de ma fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
void FOS_Menu_menubar_destroy (FOS_Menubar ** p_menubar)
{
   /* ----- Verification de l'argument ----- */
 
   if (!p_menubar)
   {
      return;
   }
 
   /* ----- */
 
 
   /* ----- Suppression de la barre de menu ----- */
 
   free ((*p_menubar)->rect);
   (*p_menubar)->rect = NULL;
 
 
   if ((*p_menubar)->menu_addr != NULL)
   {
      free ((*p_menubar)->menu_addr);
   }
   (*p_menubar)->menu_addr = NULL;
 
 
   free (*p_menubar);
   *p_menubar = NULL;
 
   /* ----- */
}
Le problème survient lors de la libération suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
   free (*p_menubar);
   *p_menubar = NULL;
et voici le message d'erreur:
*** glibc detected *** free(): invalid pointer: 0xbfe8e8a0 ***
Voici a tout hazard la partie de l'allocation de la structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
...
*p_menubar = malloc (sizeof (*p_menubar));
...
ici aussi je passe l'adresse du pointeur dans l'appel à ma fonction tout comme pour la précédente.

Merci d'avance pour votre aide