Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Alocarea dinamica a memoriei

c


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()



Document Info


Accesari: 1679
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )