Qui c'è sicuramente un errore

codice:
     while(strcmp(nome, curr->nome) > 0){
                              prec = curr;
                              curr = curr->next;
                              }
cosa succede quando, con il progressivo aggiornamento di curr, questo diventa NULL per il raggiungimento della coda? La dereferenziazione "curr->nome" non è più lecita e il programma crasha.

Prova a modificare così:

codice:
     while(curr && strcmp(nome, curr->nome) > 0){
                              prec = curr;
                              curr = curr->next;
                              }