[C]Libération de la mémoire
Coperfield
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
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
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Comment liberer de l'espace sur gmail - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Nettoyer memoire iphone - 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.