10: Allocazione dinamica della memoria Vers. 9.1 – Ottobre 2025
// Utilizzando il linguaggio C – Record _ Singolo _ Dinamico
# include < stdio. h > # include < stdlib. h > # include < string. h >
typedef struct { char Cognome [ 30 + 1 ]; char Nome [ 30 + 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) > 30));
do { printf(" Nome = ");
Attenzione del tutto analogo a: gets((* p). Nome); gets( p- > Nome);
} while(( strlen((* p). Nome) == 0) ||( strlen((* p). Nome) > 30));
do { printf(" Maglia = "); fflush( stdin); scanf("% d ",&((* p). Maglia)); } while(((* p). Maglia < 1) ||((* p). Maglia > 99));
Attenzione del tutto analogo a: scanf("% d ", &( p- > Maglia));
/* 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("\ nAllocazione non riuscita!\ n \ n "); }
return 0; }
Autore: Rio Chierego( email: riochierego @ libero. it- sito web: www. riochierego. it) Pag. 23