Salve a tutti

Ho un problema nel funzionamento del mio programma fatto in C. Il codice è il seguente :

codice:
void inserisci (int mat, alunno *head){
     
     alunno *nuovo;                                       //puntatore al nuovo alunno
     nuovo = (alunno *) malloc(sizeof(alunno));  //alloco la memoria necessaria per inserire
     alunno->matricola = mat;
     alunno->next = head;                              //inserisco in testa alla lista
     head = alunno;
     }

void scorrilista(alunno *head){
alunno *corr;
int controlla = 0;

corr = head;

while(corr){
         printf("%d  mat corrente \n", corr->matricola);
         corr = corr->next;
         controlla++;
         }
         }





main()

alunno *testa;
testa = NULL;
La struttura dati è corretta, i campi ci sono tutti e l'inserimento viene fatto senza problemi. Il problema nasce quando vado a scorrere la lista. Il programma v in crash generndo un errore relativo alla memoria.

La domanda che vi pongo è : sbaglio a settare i due puntatori nella funzione di inserimento, oppure sbaglio a creare la lista?

Attendo un vostro aiuto :-)