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.