4° Anno TEORIA 2. Allocazione dinamica della memoria | Page 9

10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
COME ALLOCARE DINAMICAMENTE I DATI NELLO HEAP
FUNZIONE DimensioneDi( VAL < variabile > | < tipo dato >): INT
E’ un SOTTOPROGRAMMA( FUNZIONE) che restituisce la quantità di memoria espressa in byte( numero intero) che una variabile oppure un determinato tipo di dato occupa in memoria. E’ di grande utilità in quanto evita al programmatore il calcolo della quantità di memoria da allocare nello heap per contenere un dato. Può essere utilizzata indipendentemente dal tipo di allocazione che si intende eseguire.
ALGORITMO Esempio _ 2 PROCEDURA main()
a: INT nbyte: INT
INIZIO // N. B. Verrà restituito in entrambi i casi 4 nbyte � DimensioneDi( a)
Scrivi( nbyte) // oppure nbyte � DimensioneDi( INT)
Scrivi( nbyte) FINE
// Utilizzando il linguaggio C – Esempio _ 2 # include < stdio. h > # include < stdlib. h >
int main( int argc, char * argv []) { int a; int nbyte;
nbyte = sizeof( a); printf("% d ", nbyte);
// oppure
nbyte = sizeof( int); printf("\ n % d ", nbyte);
return 0; }
PROCEDURA Alloca( REF < nome puntatore >: PUNTATORE A < tipo dato puntato), VAL < numero byte > | DimensioneDi(< variabile > | < tipo dato >))
E’ un SOTTOPROGRAMMA( PROCEDURA) che assegna al puntatore < nome puntatore > l’ indirizzo di un’ area di memoria ALLOCATA DINAMICAMENTE situata nello heap con dimensione in byte pari al valore del secondo parametro, da utilizzare successivamente per memorizzare un dato.
Qualora tale allocazione non fosse possibile per ragioni tecniche o perché è terminata la memoria a disposizione tra heap e segmento stack, la procedura Alloca() assegnerà al puntatore il valore NULL.
Tale valore NULL( letteralmente " niente ") abbiamo già visto essere un particolare valore COSTANTE che sta ad indicare che il puntatore non è associato a nessuna area dì memoria correttamente allocata ossia che non punta a nessuna area di memoria, indipendentemente dalla modalità di allocazione.
PROCEDURA Dealloca( VAL < nome puntatore >: PUNTATORE A < tipo dato puntato)
E’ un SOTTOPROGRAMMA( PROCEDURA) che rilascia la memoria occupata nello heap da una precedente operazione di Alloca() rendendola disponibile di nuovo per eventuali successive allocazioni dinamiche.
Da notare la chiamata a tale procedura in pratica romperà il link o collegamento che si era creato tra il puntatore e la zona di memoria puntata nello heap ma NON LO ANNULLERA’( ossia esso non verrà posto a NULL), in quanto conterrà ancora il valore che aveva ricevuto in precedenza ma che in ogni caso, non gli permetterà più il raggiungimento dell’ area di memoria associata in precedenza.
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 9