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.

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;
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
struct competition
{
  char matric[3], intitule[36], datedeb[9], pays[4];
  int tabinscp[100];
  int flagcompet;
  int poscp;
};
Au cours de mon programme j'ai donc alloué de la mémoire pour ces structures.
Ex :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
struct competition * p_compet;
p_compet = malloc( sizeof( struct competition ) );
Et cela autant de fois qu'il y a de compétitons (idem pour les concurrents)

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 !