11.07.2015 Views

LUCRAREA NR. 6 POINTERI

LUCRAREA NR. 6 POINTERI

LUCRAREA NR. 6 POINTERI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Funcţiile malloc() şi free()Aceste funcţii formează sistemul de alocare dinamică a memoriei în C şi fac parte din fisierulantet . Acestea lucrează împreună şi utilizează zona de memorie liberă plasată între codulprogram şi memoria sa permanentă (fixă) şi vârful stivei, în scopul stabilirii şi menţinerii unei liste avariabilelor memorate. De fiecare dată când se face o cerere de memorie, funcţia malloc() alocă o partedin memoria rămasă liberă. De fiecare dată când se face un apel de eliberare a memoriei, funcţia free()eliberează memorie sistemului.Declararea funcţiei malloc() se face sub forma:void *malloc (int numar_de_bytes);Aceasta întoarce un pointer de tip void, ceea ce înseamnă că trebuie utilizat un şablon explicit de tipatunci când pointerul returnat de malloc() se atribuie unui pointer de un alt tip. Dacă apelul lui malloc() seexecută cu succes, malloc() va returna un pointer la primul byte al zonei de memorie din heap ce a fostalocată. Dacă nu este suficientă memorie pentru a satisfce cererea malloc(), apare un eşec şi malloc()returnează NULL. Pentru determinarea exactă a numărului de bytes necesari fiecărui tip de date, se poatefolosi operatorul sizeof(). Prin aceasta, programele pot deveni portabile pe o varietate de sisteme.Funcţia free() returnează sistemului memoria alocată anterior cu malloc(). După eliberareamemoriei cu free(), aceasta se poate reutiliza folosind un apel malloc().Declararea funcţiei free() se realizează sub forma:free(void *p);Funcţia free() eliberează spaţiul indicat de p şi nu face nimic dacă p este NULL. Parametrul actual ptrebuie să fie un pointer la un spaţiu alocat anterior cu malloc(), calloc() sau realloc().Exemplu: Următorul program va aloca memorie pentru 40 de întregi, va afişa valoarea acestora, dupăcare eliberează zona, utilizând free():# include # include void main(void) {int t, *p;p = (int *) malloc(40*sizeof(int));if (!p) printf("Out of memory \n"); //Verificati daca p este un pointer corectelse {for (t=0; t

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!