Il est possible d'allouer dynamiquement de la mémoire
grâce aux fonctions malloc,
realloc et calloc.
Lorsque cette mémoire n'est plus utilisée, elle doit
être libérée à l'aide de la fonction free.
Ces fonctions sont definies dans la librairie standard libc et leurs
déclarations se trouvent dans stdlib.h.
void *malloc(size_t t)
renvoie l'adresse d'une zone mémoire de taille t allouée dynamiquement.
void *calloc(size_t n, size_t t)
renvoie l'adresse d'une zone mémoire de taille n x t allouée dynamiquement
et initialisée à 0.
void *realloc(void * p, size_t t)
renvoie l'adresse d'une zone mémoire de taille t allouée dynamiquement
et initialisée par recopie du contenu des t octets situés à
l'adresse p.
malloc et calloc renvoient NULL si la zone
mémoire demandée est de taille 0, ou sur une erreur, en
particulier s'il n'y a pas assez de mémoire disponible.
void free(void *p)
libère la mémoire d'adresse p, à condition qu'elle
ait été allouée à l'aide des fonctions malloc, calloc ou realloc.
Un exemple d'utilisation est donné par le module premiers (premiers.h,
premiers.c, main.c,
Makefile).
Ce module utilise l'algorithme du "crible d'Eratosthène" pour
calculer les nombres premiers inférieurs ou égaux
à une valeur n donnée. Pour cela, on considère un
tableau de booléens indicé de 2 à n dont tous les
éléments sont initialisés à vrai. Puis on
parcourt ce tableau de 2 à n. A chaque fois que l'on rencontre
une valeur vrai, l'indice est un nombre premier et on élimine
tous ses multiples.