- La qüestió de les dades dinàmiques fa referència a demanar memòria lliure al S.O. en temps d'execució. Per fer això disposem de la crida estàndard malloc() (definida a ALLOC.H), que se li passa la mida de l'espai de memòria a reservar i retorna un punter al principi del bloc assignat (si no hi ha prou memòria disponible retornarà un punter a NULL). Per tant, caldrà treballar amb punters.
- Per calcular l'espai que necessitem amb precisió disposem de l'operador de C sizeof(), que retorna la mida en bytes d'un tipus o d'una estructura (depenent del hardware i del compilador). La funció free() serveix per alliberar la memòria assignada (cal no descuidar-se d'alliberar tota la memòria que s'ha reservat).
ex 3.14: Aquest exemple demana memòria dinàmica al sistema per a un enter, una dada de tipus llibre, i un vector de 500 elements de tipus llibre. L'ús del sizeof permet independitzar el programa de la mida de les dades:
#include <alloc.h> /* defineix malloc() i free() */
typedef struct
{
char nom[50];
char autor[30];
int tipus;
int pagines;
}llibre; /* en un PC, 84 posicions de memòria per dada tipus llibre */
void main(void)
{
int *pint;
llibre *pa, *biblio; /* no distingim entre un punter a una dada
o un punter a un vector de dades */
pint = (int *) malloc(sizeof(int)); /* reservar espai per un enter */
*pint = 10; /* gravem un 10 a la posició de
memòria que s'ha assignat */
/* reservem espai per una dada tipus llibre */
pa = (llibre *) malloc(sizeof(llibre));
pa->pagines = 176; /* accedim a un camp de la dada */
/* reservem espai per 500 dades tipus llibre */
biblio = (llibre *) malloc(sizeof(llibre)*500);
if(biblio!=NULL) /* si ens ha donat tota la memòria que voliem */
biblio[2]->tipus = 1; /* accedim a un camp del segon element */
:
:
free(pint);
free(pa);
free(biblio); /* allibera tota la memòria assignada */
}