La riga

codice:
     if(strcmp(p->next->nome, curr->nome) == 0) lista = p;
nel codice precedente non c'era ed č ovviamente anche questa causa di problemi nel caso in cui "curr" sia NULL: non soltanto provi ad accedere al campo "nome" di curr ma anche al campo "nome" di p->next che nell'istruzione subito precedente č impostato proprio al valore di curr.