Korišćenjem naredbama za definisanje podataka vrši se statička dodela memorijskog prostora, što znači, u vreme prevođenja programa se zna broj podataka koji se koriste u toku izvršavanja programa.
Deklaracijom niza definiše se tačan, maksimalan, broj elemenata niza, što može dovesti do nepotrebno zauzimanje memorije. U slučajevima kada je velik broj podataka može se desiti da obrada bude nemoguća.
Deo memorije u koji se smeštaju statički definisani podaci naziva se statička zona memorije.
Ponekad, veličina memorije koja će se zauzeti se nemože specificirati. Primer, šta ako treba kreirati niz elemenata tipa student, a broj studenata se može otkriti samo za vreme izvršavanja programa, kao parametar koji je specificiran od strane korisnika?
Ovaj problem se rešava dinamičkimim alociranjem memorije. Deo memorije u kojem se vrši dinamička dodela prostora u vreme izvršavanja programa, naziva se dinamička zona memorije. Podaci u dinamičkoj zoni memorije nazivaju se dinamički podaci. Dinamički podaci stvaraju se na zahtev programera i postoje dok programer ne zatraži njihovo uništenje. Neophodno je brisanje dinamičke zone memorije, kako bi se oslobodio memorijski prostor koji je bio zauzet stvanjem iste.
C++ omogućava dinamičko alociranje memorije korišćenjem operatora new, ako je potrebno alociranje za jedan element ili new[n], ako je potrebno alociranje memorije za n elemenata. Rezultat ovih operacija je pokazivač do bloka memorije koji je rezervisan.
Veoma je bitno, nakon korišćenja rezervisane memorije, da se ista obriše. C++ briše alociranu memoriju pomoću operatora delete, za jedan element i delete[], za više elemenata.
Pr.
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
int *pniz;
pniz = new int;
*pniz = 2;
cout << *pniz << endl; //stampa ‘2’
delete pniz; // VAZNO
int N = 100;
pniz = new int[N]; //niz od 100 elemenata
pniz[5] = 3;
cout << pniz[5] << endl; //stampa ‘3’
delete [] pniz; // VAZNO!!!
system(„PAUSE“);
return EXIT_SUCCESS;
}
Alociranje memorije
Pr. Kreiranje anonimne promenljive