Alocarea dinamica 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 superioara, adaptata programarii orientate obiect.
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 m elemente reale.
double *vector;
vector=new double[m];
//prelucrari cu vector de exemplu vector[3]=4 etc.
delete [m] 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:

Cititi si afisati variabile alocate dinamic de tip numeric. determinati dublul acestora

Cititi si afisati tablouri uni si bidimensionale alocate dinamic

Cititi si afisati variabile de tip struct alocate dinamic. De exemplu informatii despre un produs.

Pentru fiecare eliberati spatiul de memorie.

Se da un numar natural p. Sa se determine daca numarul contine in scrierea lui secventa 15. de exemplu:
p=141510 contine
p=141051 nu contine

N pitici asezati unul in spatele celuilalt poarta caciuli rosii sau albe. Gasiti cel mai lung subsir de pitici alaturati care au caciula de aceeasi culoare. afisati al catelea din cei n pitici este primul pitic din acest subsir si cati pitici formeaza subsirul. Folositi un vector alocat dinamic.