[C]Libération de la mémoire
Coperfield
-
kilian Messages postés 8675 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8675 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 :
Ce que j'obtiens à la compilation :
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
A voir également:
- [C]Libération de la mémoire
- Memoire ram - Guide
- Mémoire vive - Guide
- Nettoyer ipad memoire - Guide
- Comment liberer de l'espace sur gmail - Guide
- Changer la taille de swap de la mémoire de l'ordinateur - Guide
1 réponse
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:
Là tu as un tableau de nb t_sommet.
Et tu dois le libérer d'un coup:
Et là tu t'es gourré:
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.
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.