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

10 : Allocazione dinamica della memoria Vers . 8.3 – Ottobre 2023
// Utilizzando il linguaggio C – Record _ Singolo _ Dinamico # include < stdio . h > # include < stdlib . h > # include < string . h >
# define MAXNUMCHAR 30 # define MINNUMMAGLIA 1 # define MAXNUMMAGLIA 99
typedef struct { char Cognome [ MAXNUMCHAR + 1 ]; char Nome [ MAXNUMCHAR + 1 ]; int Maglia ; } Calciatore ;
int main ( int argc , char * argv []) { Calciatore * p ;
/* ALLOCAZIONE DINAMICA del record nello heap */ p = ( Calciatore *) malloc ( sizeof ( Calciatore ));
if ( p != NULL ) { /* Caricamento e controllo campi del record allocato dinamicamente */ do { printf (" Cognome = ");
Attenzione del tutto analogo a : gets ((* p ). Cognome ); gets ( p- > Cognome );
} while ( ( strlen ((* p ). Cognome ) == 0 ) || ( strlen ((* p ). Cognome ) > MAXNUMCHAR ) );
do { printf (" Nome = ");
Attenzione del tutto analogo a : gets ((* p ). Nome ); gets ( p- > Nome );
} while ( ( strlen ((* p ). Nome ) == 0 ) || ( strlen ((* p ). Nome ) > MAXNUMCHAR ) );
do { printf (" Maglia = ");
Attenzione del tutto analogo a : fflush ( stdin ); scanf ("% d ", &( p- > Maglia )); scanf ("% d ",&((* p ). Maglia ) ); } while ( ((* p ). Maglia < MINNUMMAGLIA ) || ((* p ). Maglia > MAXNUMMAGLIA ) );
/* Visualizzazione del record */ printf ("\ nCognome immesso : "); puts ((* p ). Cognome ); printf (" Nome immesso : "); puts ((* p ). Nome ); printf (" Maglia immessa : "); printf ("% d ", (* p ). Maglia );
Attenzione del tutto analogo a : puts ( p- > Cognome ); .... puts ( p- > Nome ); .... printf ("% d ", p- > Maglia );
/* Deallocazione record allocato DINAMICAMENTE */ free ( p ); } else { printf ("\ n *** ERRORE : ALLOCAZIONE puntatore a record KO !\ n \ n "); }
return 0 ; }
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 23