Grazie, hai pienamente ragione: il ciclo while deve iterare finché p punta a NULL, perciò il giusto controllo è (p->next != NULL).
Nel frattempo ho continuato a sbatterci la testa e ho provato ad allocare head con la malloc. Non va più in crash!
Era anche quello un errore?
codice:
int main()
{
head = (nodo*)malloc(sizeof(struct nodo)); //alloca nuovo nodo
head->next = NULL; // creazione della lista
printf ("\n Nuovo inserimento: ");
scanf ("%d", &n); // leggi numero da inserire
nuovo = (nodo*)malloc(sizeof(struct nodo)); //alloca nuovo nodo
nuovo->dato = n; // inserisci N in nodo.dato
nuovo->next = NULL; // NUOVO punta a NULL.
printf("\n Allocato nuovo nodo all'indirizzo %d\n ", nuovo);
head->next=nuovo;
p=head; // P coincide col nodo di testa
while (p->next != NULL) // finché la lista non è finita
{ p = p->next; } // P punta la nodo successivo
p->next = nuovo; // l'ultimo nodo punta a NUOVO
system("pause");
return 0;
}
però ho lasciato "p=head", e non ha dato problemi. Come mai?