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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
# include < stdio . h > # include < stdlib . h >
int main ( int argc , char * argv []) { int * p , * q ; int n , i ;
/* Check sul numero di elementi possibili dell ' array dinamico */ /* VERA DINAMICITA ': unico limite la quantità di memoria assegnata al TASK */ do { printf ("\ nInserisci la dimensione dl vettore : "); fflush ( stdin ); scanf ("% d ",& n );
} while ( n <= 0 );
/* ALLOCAZIONE DINAMICA dell ' array nello heap */ p = ( int *) malloc ( n * sizeof ( int ));
if ( p != NULL ) { printf ("\ nALLOCAZIONE puntatore OK !\ n \ n ");
/* il puntatore q punta all ' ultimo elemento dell ' array dinamico */ q = p + ( n-1 );
/* Ciclo di caricamento array dinamico cou uso di p PUNTATORE 1 ° ELEMENTO */ printf (" CARICAMENTO Vettore dinamico ATTRAVERSO IL PUNTATORE AL SUO PRIMO ELEMENTO \ n "); for ( i = 0 ; i < n ; i ++) { printf (" Elemento del vettore con indice % d ossia *( p +% d ) che equivale a p [% d ]: "
, i , i , i ); fflush ( stdin ); scanf ("% d ", p + i ); }
/* Ciclo di visualizzazione array dinamico cou uso di q PUNTATORE ULTIMO ELEMENTO */ printf ("\ nVISUALIZZAZIONE Vettore dinamico ATTRAVERSO IL PUNTATORE AL SUO ULTIMO ELEMENTO "); for ( i = 0 ; i < n ; i ++) { printf ("\ nIl valore di *( q- % d ) che equivale a q [% d ] e ': % d ",
( n-1 ) -i, ( n-1 ) -i, *( q-i ));
} /* Deallocazione area di memoria dimamica */ printf ("\ n \ nDEALLOCAZIONE puntatore a vettore OK !"); free ( p ); /* Per evitare DANGLING REFERENCE */ q = NULL ; } else { printf ("\ n *** ERRORE : ALLOCAZIONE puntatore a vettore KO !\ n \ n "); }
return 0 ; }
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 20