Escolar Documentos
Profissional Documentos
Cultura Documentos
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 *.
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:
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 *p;
if ((p=(char *)malloc(strlen(s)+1) ) != NULL
{ strcpy (p,s);
return p;
} else
return NULL;
Observaţii:
2o. Fişierul alloc.h s-a inclus deoarece conţine prototipul funcţiei malloc.
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.