Ominide 7993 punti

Funzioni di gestione dinamica della memoria


Allocazione della memoria


void *malloc ( size_t size ); //blocco contiguo di dimensione size
void *calloc ( size_t nmemb , size_t size ); //blocco contiguo di dimensione nmemb*size
La differenza tra le due funzioni è con l’utilizzo della funzione calloc() inizializza tutti i bit di memoria adibiti alla variabili a 0.

Restituiscono un puntatore void* al primo byte di memoria, ma per usare quella memoria è necessario effettuare un cast. Poichè array e puntatori si comportano allo stesso modo, si può accedere alla memoria allocata dinamicamente come fosse array.
Deallocazione della memoria
void free(void *ptr);
la funzione usata per rilasciare la memoria allocata dinamicamente, disponibile in seguito per altre allocazioni.
Se ptr:
- punta a NULL, la funzione non fa nulla
- è un puntatore non valido, quindi non punta ad un indirizzo di memoria di malloc(), calloc(), realloc() o la variabile è già stata deallocata, il comportamento è non definito
È utile liberare memoria allocata dinamicamente quando non è più necessaria, poiché il C non ha un garbage collector (modalità automatica che gestisce la memoria, nel quale il compilatore libera autonomamente la memoria non più utilizzata).
Modifica della dimensione di memoria
void *realloc(void *ptr, size_t size);
La funzione usata per modificare la dimensione della memoria puntata da ptr nella dimensione specificata da size, la dimensione può sia aumentare sia diminuire. Se ptr:
- è NULL, realloc() è uguale a malloc()
- punta ad un indirizzo non valido, il comportamento è non definito
- punta ad un indirizzo valido e la dimensione size è minore della precedente, la funzione ritorna ptr
- punta ad un indirizzo valido e la dimensione size è maggiore della precedente, la funzione può:
-- Ritornare ptr, se si può estendere in modo contiguo la memoria
-- Ritornare un nuovo indirizzo di memoria (il blocco viene ricopiato in una nuova locazione)
-- Ritornare NULL se non è possibile allocare contiguamente la memoria richiesta
- punta ad un indirizzo valido e la dimensione è 0, realloc() è uguale a free()
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email