laborator 9 alocare dinamica

5
Alocarea dinamică a memoriei - stdlib.h : funcții standard utilizate pentru alocarea dinamică a memoriei; - zona de memorie HEAP; - malloc, calloc, realloc; void * malloc ( size_t size ); void * calloc ( size_t num, size_t size ); void * realloc ( void * ptr, size_t size ); Observație: Fiecare dintre funcțiile de alocare ( malloc, calloc, realloc) va returna adresa zonei de memorie alocata ( void * ). In cazul în care acesta nu poate fi alocată, atunci rezultatul alocării este NULL. La apelul fiecărei funcții se va utiliza: - Operatorul sizeof : determină dimensiunea necesară unui tip de date; - Operatorul de cast pentru conversia adresei primite în urma alocării ( void * ) la tipul de date care va fi memorată la adresa respectivă. Exemple: //malloc – alocarea dinamica a ununi element de tip int #include <stdio.h> #include <stdlib.h> int main() { int *p; p = ( int *)malloc(sizeof(int )); if( p == NULL){ printf("Eroare la alocarea de memorie!"); return 1; } *p = 10; printf("%d", *p); free(p); return 0; } //calloc //vector alocat dinamic( cu numarul de elemente cunoscut)

Upload: valentina

Post on 17-Dec-2015

6 views

Category:

Documents


0 download

DESCRIPTION

sa

TRANSCRIPT

Alocarea dinamic a memoriei

Alocarea dinamic a memoriei stdlib.h : funcii standard utilizate pentru alocarea dinamic a memoriei; zona de memorie HEAP; malloc, calloc, realloc;

void * malloc ( size_t size );

void * calloc ( size_t num, size_t size );

void * realloc ( void * ptr, size_t size );

Observaie:Fiecare dintre funciile de alocare ( malloc, calloc, realloc) va returna adresa zonei de memorie alocata ( void * ). In cazul n care acesta nu poate fi alocat, atunci rezultatul alocrii este NULL.

La apelul fiecrei funcii se va utiliza:

Operatorul sizeof : determin dimensiunea necesar unui tip de date;

Operatorul de cast pentru conversia adresei primite n urma alocrii ( void * ) la tipul de date care va fi memorat la adresa respectiv.

Exemple://malloc alocarea dinamica a ununi element de tip int#include

#include

int main()

{

int *p;

p = ( int *)malloc(sizeof(int ));

if( p == NULL){

printf("Eroare la alocarea de memorie!");

return 1;

}

*p = 10;

printf("%d", *p);

free(p);

return 0;

}

//calloc

//vector alocat dinamic( cu numarul de elemente cunoscut)

#include

#include

int main()

{

int *p,n;

int i = -1;

printf("Introduceti numarul de elemente: ");

scanf("%d",&n);

p = (int*)calloc(n,sizeof(int));

if ( p == NULL){

printf("Eroare la alocarea de memorie!");

return 1;

}

printf("\nIntroduceti elementele:\n");

for(i = 0; i