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

10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
NOTA BENE UN PUNTATORE può essere usato anche SENZA UTILIZZARE l’ ALLOCAZIONE DINAMICA......
Infatti li abbiamo già utilizzati: a) PASSAGGIO DEI PARAMETRI PER RIFERIMENTO O INDIRIZZO b) ASSOCIARLI A VARIABILI ALLOCATE STATICAMENTE( vedi anche esempio precedente)
Segmento HEAP
ALGORITMO Esempio _ 1 PROCEDURA main()
a: INT p: PUNTATORE A INT
INIZIO p � NULL // p non punta ad indirizzo valido p � & a //( 1) Leggi(* p) // invece di Leggi( a) * p � * p + 10 // invece di a � a + 10 Scrivi(* p) // invece di Scrivi( a) FINE
Segmento STACK
Segmento Dati
( 1)
& a
NULL
p
& a
4 byte a
Segmento Codice
// Utilizzando il linguaggio C – Esempio _ 1
# include < stdio. h > # include < stdlib. h >
int main( int argc, char * argv []) { int a; int * p;
p = NULL;
// p non punta ad indirizzo valido
p = & a;
//( 1)
fflush( stdin); scanf("% d ", p); // invece di scanf("% d ", & a);
* p = * p + 10; // invece di a = a + 10; printf("% d ", * p); // invece di printf("% d ", a);
return 0; }
Il valore simbolico NULL viene usato per indicare che un puntatore non contiene al momento un indirizzo di memoria valido poiché il valore 0 invece è utilizzato come indirizzo in diverse applicazioni di sistema. Dato che l’ indirizzo di memoria NULL( ma anche 0) non è utilizzabile da nessun programma utente, qualsiasi tentativo di accesso a questa posizione, sia in scrittura che in lettura, produrrà un errore bloccante. Quindi, dopo aver posto p � NULL oppure p � 0, tentare di accedere a * p genererà un errore bloccante. Istruzioni successive a tale inizializzazioni quali * p �4 oppure a � * p produrranno anch’ esse un errore bloccante. Nel linguaggio C la costante NULL è definita nella libreria standard stdlib. h
..... MA..... L’ ALLOCAZIONE DINAMICA non può esistere SENZA L’ UTILIZZO DEI PUNTATORI
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 7