Alocarea dinamica a memoriei
Alocarea memoriei unei variabile se face astfel
de catre compilator, la declararea unei variabile de un tip oarecare
cu functia malloc()
cu operatorul new
Alocarea memoriei cu functia malloc
Alocarea memoriei unei variabile cu functia malloc sau operatorul new se face la executia programului.
Alocarea de memorie se poate face cu functia
void * malloc(int size);
unde size este numarul de octeti de alocat. Tipul functiei este void* si el trebuie convertit in pointer la tipul alocat. Eliberarea memoriei alocate cu functia malloc() se face cu functia
void free(p);
unde p este o variabila tip pointer ce contine adresa zonei de memorie ce va fi eliberate. Prototipul acestor functii se afla in biblioteca <stdlib.h>.
Alocarea memoriei cu operatorul new
Alocarea de memorie pentru o variabila sau pentru un vector se poate face cu operatorul new. Fie T tipul unei variabile. Operatorul new cu forma
new T
aloca memorie pentru o variabila de tipul T, iar operatorul new cu forma
new T[n]
aloca memorie pentru un vector de tipul T cu n componente, unde n este un numar intreg. Operatorul new are ca rezultat un pointer la memoria alocata. Fie instructiunea
double *x, *y ;
Instructiunea
x = new double;
aloca memorie pentru o variabila scalara de tip double, in timp ce instructiunea
y = new double[17] ;
aloca memorie pentru un vector cu 17 componente. Eliberarea memoriei alocate cu operatorul new se face cu operatorul delete. Instructiunea
delete x;
elibereaza memoria alocata cu new double, in timp ce instructiunea
delete [] y;
elibereaza memoria alocata vectorului cu new double[17].
Probleme rezolvate
Problema Se va aloca un vector de 5 componente tip double folosind operatorul new. Se vor citi componentele vectorului de la tastatura si se va calcula suma componentelor. Slutia problemei este urmatoarea.
# include <iostream.h>
int main()
In captura de ecran este reprodus un exemplu de executie.
Problema 2. Se va aloca un vector de 3 componente tip double folosind operatorul malloc. Se vor citi componentele vectorului de la tastatura si se va calcula suma componentelor. Programul de rezolvare a problemei este prezentat mai jos.
# include <iostream.h>
# include <stdlib.h>
int main()
cout << 'Suma numerelor este : ' << s << endl;
free(v);
return 0;}
Un exemplu de executie este urmatorul :
Probleme propuse
Problema 1. Fie doi vectori, x si y, cu cate trei componente de tip double fiecare. Elementele acestor vectori se vor citi de la tastatura. Sa se faca un program care sa calculeze suma celor doi vectori. Vectorii se vor aloca cu instructiunea new.
Problema 2. Fie doi vectori, a si b, cu cate trei componente de tip double fiecare. Elementele acestor vectori se vor citi de la tastatura. Sa se faca un program care sa calculeze produsul scalar al celor doi vectori. Vectorii se vor aloca cu instructiunea malloc.
Indicatie. Produsul scalar al celor doi vectori este
Problema 3. Fie un vector a cu trei componente de tip double. Componentele vectorului a se citesc de la tastatura. Sa se determine cel mai mic component al vectorului a. Vectorul a se va aloca cu instructiunea new.
Problema 4. Fie un vector x cu trei componente de tip double. Componentele vectorului x se citesc de la tastatura. Sa se determine cel mai mare component in valoare absoluta al vectorului a. Vectorul a se va aloca cu instructiunea malloc.
Problema 5. Sa se faca o functie care sa calculeze suma componentelor unui vector x cu cinci componente de tip double. Prototipul functiei va fi
double suma(double x[]) ;
Sa se utilizeze functia pentru a calcula in functia main() suma componentelor unui vector a cu 5 componente de tip double alocat cu functia new. Elementele vecorului a se citesc de la tastatura.
Problema 6. Fie urmatorul program ce defineste doua variabile de tip pointer la char, ptrchar si ptrchar2. Sa se execute programul si sa se explice rezultatele.
# include <iostream.h>
# include <stdlib.h>
int main()
|