[C]Libération de la mémoire

Coperfield -  
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je souhaite créer une fonction de libération de la mémoire mais ma fonction donne des erreurs :

typedef struct{
  int x,y,z;
}t_sommet;


typedef struct{
  t_sommet *tab;// Tableau d'éléments
  size_t size;// Taille allouée
  size_t nb;// Nb d'éléments
}t_tabSommet;


void libere_tableau_sommets(t_tabSommet *sommets){
  size_t i;
  for(i=0; i<sommets->nb; i++)
    free(sommets->tab[i]);
  sommets.tab = NULL;
}


Ce que j'obtiens à la compilation :
code.c: Dans la fonction « libere_tableau_sommets »:
code.c:123: error: incompatible type for argument 1 of `free'
code.c:124: error: request for member `tab' in something not a structure or union

1 réponse

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Oui c'est normal.
Quand tu alloues de la place pour tab, tu ne l'alloues qu'une seule fois et non pas pour chaque case. Tu alloues nb t_sommet de cette manière:

sommets->tab=malloc(sizeof (t_sommet) * nb);

Là tu as un tableau de nb t_sommet.
Et tu dois le libérer d'un coup:
free(sommets->tab);


Et là tu t'es gourré:
sommets.tab = NULL;

sommets n'est pas une structure mais un pointeur vers une structure.
Donc il faut utiliser l'opérateur "->" et non pas "." pour accéder à un des champs de la structure vers laquelle il pointe.
0