Hello !
P'tite question sur la désallocation de mémoire :
J'ai une liste (doublement chainée, mais peu importe) dont chaque cellule contient un pointeur sur void.
Ce pointeur sur void va en fait pointer sur deux structures différentes (une destinée aux competitions et l'autre aux concurrents). Je mets pour l'exemple celle des competitions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 typedef struct scell { void * value; struct scell * next, * previous; } cell; typedef struct slist { int nbcell; cell * first, * current, * last; } list;
Au cours de mon programme j'ai donc alloué de la mémoire pour ces structures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct competition { char matric[3], intitule[36], datedeb[9], pays[4]; int tabinscp[100]; int flagcompet; int poscp; };
Ex :
Et cela autant de fois qu'il y a de compétitons (idem pour les concurrents)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 struct competition * p_compet; p_compet = malloc( sizeof( struct competition ) );
J'ai également chaque fois créé une nouvelle celleule dans ma liste afin de "contenir" la structure compétition sus-créée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 { lis->current = lis->last->previous; lis->current->next->previous = ( cell * ) malloc( sizeof( cell ) ); lis->current->next->previous->value = x; lis->current->next->previous->previous = lis->current; lis->current->next->previous->next = lis->current->next; lis->current->next = lis->current->next->previous; ( lis->nbcell ) ++; }
Voilà !...
Bon, maintenant, j'en suis à la libération de toutes ces structures (fin de programme). Est-ce qu'un free d'une cellule va automatiquement engendrer un free d'une structure (je ne pense pas mais je voudrais une confirmation) ?
Merci !
Partager