Sunteți pe pagina 1din 2

Alocarea dinamica a memoriei.

a) Funciile malloc i free Asigura controlul direct, la executie al alocarii de memorie de catre programator prin apelul unor functii specifice, cu prototipurile in <stdlib.h> si <alloc.h> void* malloc(unsigned n); Funcia malloc () necesit un singur argument (numrul de octe i care vor fi alocai) i returneaz un pointer generic ctre zona de memorie alocat (pointerul conine adresa primului octet al zonei de memorie rezervate). void* calloc(unsigned n, unsigned dim); Funcia calloc () lucreaz n mod similar cu malloc: aloc memoria pentru un tablou de n elemente, numrul de octe i pe care este memorat un element este mrimea n octei a unui element i returneaz un pointer ctre zona de memorie alocat. void* realloc(void* p, unsigned n); Funcia realloc () permite modificarea zonei de memorie alocat dinamic cu ajutorul funciilor malloc sau calloc. void free(void* p); Eliberarea memoriei allocate dynamic cu una dintre func iile malloc, calloc sau realloc se realizeaz cu ajutorul funciei free (). b) Operatorii new i delete n C++, alocarea dinamic se face folosind operatorii new i delete. Operatorul new permite alocarea de memorie n heap. Sintaxa utilizat este: Alocare element: Alocare masiv: Dezalocare element: Dezalocare masiv: pointer = new tip(iniializare); pointer = new tip[nr_elemente]; delete pointer; delete [ ] pointer;

Spre deosebire de functia malloc(), operatorul new tie, n mod implicit, ct memorie trebuie alocat fiecarui tip de obiect i poate produce apelul unui constructor. Exemplu: n loc de: int*p=(int*)malloc(sizeof (int)); //funcia de alocare dinamica de memorie n C vom scrie: int*p=new int; // alocare dinamica de memorie prin operatorul new n C++ sau

int*p=new(int); // new actioneaza ca functie n C++ delete p;// elibereaza zona de memorie alocata prin new Folosind operatorul new se aloca in mod automat memorie suficienta pentru obiectele de tipul respectiv, fara a se mai utilize operatorul cast de conversie a tipului sau operatorul sizeof. Operatorul new returneaza un pointer de acelasi tip. Operatorul new poate include si initializarea memoriei alocate. Analog functiei free( ) din C, n C++ exist operatorul delete care are ca scop eliberarea zonei de memorie alocat dinamic cu operatorul new. Operatorul delete este prezent n cadrul destructorilor. nainte de a elibera zona de memorie alocat unui obiect, se va apela destructorul sau. Cu operatorul delete se poate realiza o eliberare selectiv a spaiului alocat dinamic cu operatorul new. Operatorul new aloc spaiu n HEAP pentru o variabil dinamic. Dupa alocare, adresa variabilei se atribuie lui p, unde p este o variabil de tip pointer catre tip: p=new tip; Numrul de octei alocai n HEAP este egal cu numarul de octei ocupat de o variabila de tipul respectiv. Durata de via a unei variabile alocate n HEAP este pna la eliberarea spaiului ocupat (cu delete) sau pna la sfaritul executrii programului.Operatorul delete elibereaz spaiul rezervat pentru variabila a carei adresa este retinuta in p. Dupa eliberare, continutul variabilei p este nedefinit. delete p; Ex: 1. Variabile de tip pointer ctre variabile de tip int. Variabila adr1 poate reine adrese ale variabilelor de tip int. int* adr1; adr1=new int; // aloc spatiu n HEAP pentru o variabila de tip int *adr1=7; // variabila alocat reine 7 cout<<*adr1; // tipresc coninutul variabilei delete adr1; // eliberez spaiul 2. Variabile de tip pointer catre variabile de tip float. Variabila adresa, poate re ine adrese ale variabilelor de tip float. float* adresa; // sau float* adresa=new float; adresa=new float; *adresa=7.65; cout<<*adresa;

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