Developpez.com - C
X

Choisissez d'abord la catégorieensuite la rubrique :

next up previous contents index
Next: Exercice Up: Structures, unions et énumérations Previous: Détermination de la taille

Sous-sections

     
Allocation et libération d'espace pour les structures

Nous allons voir dans ce paragraphe trois fonctions de la bibliothèque standard permettant d'allouer et de libérer de l'espace.

Allocation d'espace : fonctions malloc et calloc

       

Quand on crée une liste chaînée, c'est parce qu'on ne sait pas à la compilation combien elle comportera d'éléments à l'exécution (sinon on utiliserait un tableau). Pour pouvoir créer des listes, il est donc nécessaire de pouvoir allouer de l'espace dynamiquement. On dispose pour cela de deux fonctions malloc et calloc.

Allocation d'un élément : fonction malloc

La fonction malloc admet un paramètre qui est la taille en octets de l'élément désiré et elle rend un pointeur vers l'espace alloué. Utilisation typique :
#include <stdlib.h>
struct personne *p;

p = malloc(sizeof(struct personne));

Allocation d'un tableau d'éléments : fonction calloc

Elle admet deux paramètres :
-
le premier est le nombre d'éléments désirés ;
-
le second est la taille en octets d'un élément.
son but est d'allouer un espace suffisant pour contenir les éléments demandés et de rendre un pointeur vers cet espace. Utilisation typique :
#include <stdlib.h>
struct personne *p;
int nb_elem;

...     /*   init  de nb_elem   */
p = calloc(nb_elem,sizeof(struct personne));
On peut alors utiliser les éléments p[0], p[1], ... p[nb_elem-1].

Libération d'espace : procédure free

 

On libère l'espace alloué par malloc ou calloc au moyen de la procédure free qui admet un seul paramètre : un pointeur précédemment rendu par un appel à malloc ou calloc. Utilisation typique :

#include <stdlib.h>
struct personne *p;

p = malloc(sizeof(struct personne));
...   /*   utilisation de la structure allouée   */
free(p);


next up previous contents index
Next: Exercice Up: Structures, unions et énumérations Previous: Détermination de la taille
Bernard Cassagne
1998-12-09
Contacter le responsable de la rubrique C