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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
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