Sunteți pe pagina 1din 4

Alocarea dynamica a memoriei

În limbajul C++ alocarea dinamica a memoriei si eliberarea ei se pot realiza cu


operatorii new si delete. Folosirea acestor operatori reprezinta o metoda adaptata
programarii orientate obiect - POO.
Operatorul new este un operator unar care returneaza un pointer la zona de
memorie alocata dinamic. În situatia în care nu exista suficienta memorie si
alocarea nu reuseste, operatorul new returneaza pointerul NULL.
Operatorul delete elibereaza zona de memorie spre care pointeaza argumentul sau.

Sintaxa:

tipdata_pointer = new tipdata;


tipdata_pointer = new tipdata(val_initializare);
//pentru initializarea datei pentru care se aloca memorie dinamica
tipdata_pointer = new tipdata[nr_elem]; //alocarea memoriei pentru un tablou

delete tipdata_pointer;
delete [nr_elem] tipdata_pointer; //eliberarea memoriei pentru tablouri

Tipdata reprezinta tipul datei (predefinit sau obiect) pentru care se aloca dinamic
memorie, iar tipdata_pointer este o variabila pointer catre tipul tipdata.

Pentru a putea afla memoria RAM disponibila la un moment dat, se poate utiliza
functia coreleft:
unsigned coreleft(void);

Exercitiu: Sa se aloce dinamic memorie pentru o data de tip întreg:

int *pint;
pint=new int;
//prelucrari cu *pint
delete pint;

Exercitiu: Sa se aloce dinamic memorie pentru o data reala, dubla precizie,


initializând-o cu valoarea -7.2.

double *p;
p=new double(-7.2);
//prelucrari cu *p
delete p;
Exercitiu: Sa se aloce dinamic memorie pentru un vector de n elemente reale.
int n;
double *vector;
cin>>n;
vector=new double[m];
//prelucrari cu vector de exemplu vector[3]=4 etc.
delete [n] vector; // delete vector va dezaloca numai prima componenta
Exercitiu: Sa se aloce dinamic memorie pentru o matrice cu 3 linii si 5 coloane de
tip double.
double (*a)[5]=new double [3][5];
//prelucrari cu a de exemplu a[2][2]==4.9 etc.
delete [3] a;

Exercitiu: Sa se aloce dinamic memorie pentru o structura cu doua campuri: unul


intreg iar celelat de tip caracter:

struct articol
{int nr;
char c;
};

articol *pa;
pa=new articol;
cout<<endl<<"nr=";cin>>pa->nr;
cout<<endl<<"caracterul ";cin>>pa->c;
cout<<endl<<pa->nr<<" "<<pa->c<<" tot la adresa "<<pa<<endl;
delete pa;

Probleme propuse:

1. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza


suma celor doua numere folosind variabile alocate dinamic.

2. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza


suma celor doua numere folosind pointeri catre variabile globale.

3. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza


suma celor doua numere folosind o variabila de tip structura alocata dinamic.

4. Se citesc elementele unui vector alocat dinamic. Scrieti un program C++ care
calculeaza si afiseaza suma tuturor elementelor vectorului.
1. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza
suma celor doua numere folosind variabile alocate dinamic.

1. #include <iostream>
2. using namespace std;
3.
4. int *pa,*pb,*pc;
5.
6. int main()
7. {
8. pa=new(int);
9. pb=new(int);
10. pc=new(int);
11. cout<<"a=";
12. cin>>*pa;
13. cout<<"b=";
14. cin>>*pb;
15. *pc=*pa+*pb;
16. cout<<"c="<<*pc<<endl;
17. //cout<<sizeof(pc)<<sizeof(pb)<<sizeof(pc);
18. delete(pa);
19. delete(pb);
20. delete(pc);
21. }

2. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza


suma celor doua numere folosind pointeri catre variabile globale.

1. #include <iostream>
2. using namespace std;
3.
4. int a,b,c;
5. int *pa,*pb,*pc;
6.
7. int main()
8. {
9. pa=&a;
10. pb=&b;
11. pc=&c;
12. cin>>*pa>>*pb;
13. *pc=(*pa)*(*pb);
14. cout<<"c="<<*pc;
15. }
3. Se citesc doua numere naturale.Scrieti un program C++ care calculeaza si afiseaza
suma celor doua numere folosind o variabila de tip structura alocata dinamic.

1. #include <iostream>
2. using namespace std;
3.
4. struct P
5. {
6. int a;
7. int b;
8. int s;
9. }a;
10. P* pa;
11. int main()
12. {
13. pa=new(P);
14. cin>>pa->a;
15. cin>>pa->b;
16. pa->s=(pa->a)+(pa->b);
17. cout<<pa->s;
18. delete(pa);
19. }

4. Se citesc elementele unui vector alocat dinamic. Scrieti un program C++ care
calculeaza si afiseaza suma tuturor elementelor vectorului.

1. #include <iostream>
2. using namespace std;
3.
4. int *pa[101];
5. int n,s;
6.
7. int main()
8. {
9. int i;
10. cin>>n;
11. for(i=1;i<=n;i++)
12. {
13. pa[i]=new(int);
14. cin>>*pa[i];
15. s+=*pa[i];
16. }
17. cout<<s<<endl;
18. for(i=1;i<=n;i++)
19. {
20. delete(pa[i]);
21. }
22. }