Você está na página 1de 2

ALOCAREA DINAMICĂ A MEMORIEI

Biblioteca standard a limbajului C pune la dispoziţia utilizatorului funcţii care permit


alocarea de zone de memorie în timpul execuţiei programului. O astfel de zonă de memorie
poate fi utilizată pentru a păstra date temporare. Zona respectivă poate fi eliberată în
momentul în care nu mai sunt necesare datele care au fost păstrate în ea. Alocarea de zone de
memorie şi eliberarea lor în timpul execuţiei programelor permite gestionarea optimă a
memoriei de către programator. Un astfel de mijloc de gestionare a memoriei îl vom numi
alocare dinamică a memoriei.

Vom indica două funcţii din bibloteca limbajului C utilizate frecvent în alocarea dinamică
a memoriei. Prototipurile lor se află în fişierele standard alloc.h şi stdlib.h, deci pentru a le
utiliza vom include unul din aceste fişiere.

Funcţia malloc permite alocarea unui bloc de memorie a cărui dimensiune se specifică în
octeţi. Funcţia returnează un pointer spre începutul zonei alocate. Întrucât acest pointer
trebuie să permită memorarea oricărui tip de dată în zona alocată, el este de tip void *.

Prototipul funcţiei este:

void *malloc (unsigned n);

unde n este numărul de octeţi al zonei de memorie care se alocă. În cazul în care n este prea
mare, funcţia returnează pointerul NULL.

Funcţia free eliberează o zonă de memorie alocată prin malloc. Prototipul ei este:

void free (void *p);

unde p este pointerul returnat de malloc la alocare, deci este pointerul spre începutul zonei
care se eliberează.

Exemplu:

Funcţia memchar memorează un şir de caractere într-o zonă de memorie alocată prin funcţia
malloc. Ea returnează adresa de început a zonei în care s-a salvat şirul de caractere, deci
returnează un pointer spre tipul char.

#include <stdio.h>

#include <alloc.h>

#include <string.h>

char *memchar (char *s)

{ char *p;
if ((p=(char *)malloc(strlen(s)+1) ) != NULL

{ strcpy (p,s);

return p;

} else

return NULL;

Observaţii:

1o. În fişierul stdio.h există definiţia constantei NULL.

2o. Fişierul alloc.h s-a inclus deoarece conţine prototipul funcţiei malloc.

3o. Fişierul string.h conţine prototipurile funcţiilor strlen şi strcpy.

4o. Funcţia malloc se apelează pentru a rezerva strlen(s)+1 octeţi; strlen returnează numărul de
octeţi cuplaţi de caracterele proprii ale lui s (fără caracterul NULL). Cum în zona de memorie
rezervată prin malloc se păstrează şi caracterul NULL, lungimea returnată de funcţia strlen s-a
mărit cu 1.

5o. Pointerul returnat de malloc a fost convertit spre char *, deoarece el este de tip void *.
Acest pointer se atribuie lui p, deci p pointează spre începutul zonei de memorie alocate prin
apelul funcţiei malloc. Se testează dacă acest pointer este diferit de NULL (deci dacă s-a putut
aloca memoria de dimensiunea cerută). În caz afirmativ, se transferă şirul prin apelul funcţiei
strcpy, returnându-se apoi valoarea pointerului p.

Você também pode gostar