[C]Libération de la mémoire
Coperfield
-
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
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 :
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
- Nettoyer memoire iphone - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - 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.