Sunteți pe pagina 1din 2

Alocarea dinamic a memoriei

November 9, 2009

Noiuni de baz
Alocarea dinamic a memoriei se realizeaz n C cu ajutorul funciilor malloc,
calloc i realloc, din malloc.h. Cele trei funcii returneaz tipul (void) de
aceea la alocare trebuie fcut conversie de tip.
Atunci cnd alocarea de memorie nu s-a putut realiza, se returneaz N U LL.
Funcia malloc: void malloc(nr_octeti_alocati);
Funcia calloc: void calloc(nr_blocuri, nr_octeti_per_bloc);
n plus funcia calloc duce la iniializarea cu 0 a zonei de memorie aloact.

Exemplu :

lungime n.

alocarea dinamic a memoriei pentru un vector v de ntregi de


v = (int)malloc(n sizeof (int));

sau
v = (int)calloc(n, sizeof (int));

Funcia realloc este utilizat pentru reajustarea dimensiunii unei zone de


memorie care a fost deja alocat. n cazul n care zona de memorei realocat
este mai mic dect zona iniial, atunci se copiaz din zona iniial n noua
zon de memorie doar attea date cte au loc.

Exemplu : realocarea memoriei pentru vectorul v de la dimensiunea n la


dimensiunea m.
v = (int)realloc(v, m sizeof (int))

Eliberarea zonei de memorie alocat dinamic pentru v se realizeaz cu


f ree(v);

Exemplu :

aocarea dinamic a memoriei pentru o matrice mat de ntregi


de dimensiuni m n nt-un bloc de memorie compact.
mat = (int )malloc(m sizeof (int));/*aloc spatiu pentru m vectori
de dimesiune n*/
mat[0] = (int)malloc(m n sizeof (int));/*aloc spatiu pentru toate
elementele matricii; mat[0]

contine adresa de inceput*/

f or(i = 1;i < m; i + +)


mat[i] = mat[i 1] + n;/*adresa de inceput pentru ecare linie
i este pastrata in mat[i]*/

Eliberarea memoriei se va face nti prin f ree(mat[0]) apoi prin f ree(mat).


Alt metod de alocare este prin alocarea separat de memorie pentru ecare
linie a matricii.
mat = (int )malloc(m sizeof (int));/*aloc spatiu pentru m
vectori de dimesiune n*/
f or(i = 0;i < m; i + +)
mat[i] = (int)malloc(n sizeof (int));

n acest caz, la nal trebuie eliberat memoria pentru ecare linie n parte.

S-ar putea să vă placă și