Esercizio di programmazione su segmentation fault
by Tullio Facchinetti
Il programma in linguaggio C segfault.c è stato realizzato per contenere una serie di errori logici che causano errori di “segmentation fault”.
Lo studente è chiamato a scaricare ed analizzare il programma per individuare tutti gli errori ed ottenere un programma che funzioni correttamente. Può quindi essere utilizzato come test di autovalutazione per capire se sono stati compresi vari concetti illustrati nel corso di programmazione.
Tra gli argomenti che bisogna conoscere per scoprire gli errori contenuti nel programma vi sono: l’uso del ciclo for
, l’uso delle funzioni, il passaggio di parametri per riferimento, i vettori, l’allocazione dinamica della memoria con malloc
e free
, il passaggio per riferimento, le strutture dati, l’aritmetica dei puntatori, la stampa, il passaggio di parametri al programma da linea di comando, la generazione di numeri pseudo-casuali di tipo intero in un intervallo specifico, la struttura di una stringa.
Il programma contiene 9-10 errori diversi.
Funzionamento desiderato del programma
Il funzionamento atteso dal programma è illustrato di qui di seguito segfault.c. Per i dettagli implementativi si veda il codice sorgente del programma.
Il programma alloca un numero di strutture di tipo struct dato
.
Il numero di strutture da allocare viene fornito da linea di comando.
I valori nelle singole strutture contengono dati generati in modo pseudo-casuale, e rappresentano l’iniziale di un nome e di un cognome (es. "F."
o "T."
), e un valore numerico che rappresenta una età anagrafica.
Dopo l’assegnamento, i valori vengono stampati col formato (esempio):
N. W. ha 25 anni
R. B. ha 23 anni
M. Q. ha 27 anni
...
Al termine del programma, viene liberata la memoria precedentemente allocata.
Se al programma non viene fornito alcun paramentro, deve terminare senza errori e senza stampare niente.