- 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 */ }