Secondo me, e data la tarda ora non sono totalmente sicuro, l'errore è qui:
pLista=puntante;
nella funzione nuovo_elemento
xke da quello ke vedo pLista è un puntatore ad un elemento della lista e nn è l'indirizzo in cui risiede il puntatore alla lista...
Cioè tu con il typedef hai chiamato un elemento ( detto anche nodo della lista) LISTA, xò quello nn è una lista ma è solo un elemento...
quindi tu hai chiamato un elemento con il nome LISTA, quindi la lista avrà il tipo LISTA* quindi in questa funzione
void nuovo_elemento(LISTA *pLista)
tu stai passando pLista che è un puntatore a LISTA (che è un elemento), cioè pLista è un puntatore ad un singolo elemento (che hai kiamato LISTA), cioè pLista, essendo un puntatore ad un elemento ad un elemento, è una lista. invece quello ke devi fare è passare alla funzione un puntatore a lista, cioè un puntatore ad un puntatore a elemento... Passando pLista come hai fatto tu quando esegui
pLista=puntante;
pLista viene modificato solo nell'ambiente della funzione.
Un'alra cosa:
puntante->id++;
questo id non viene mai inizializzato e la malloc non imposta le variabili ne a 0 ne a NULL quindi stai incrementando un numero a caso...
Anche nella funzione di stampa fai un'assegnazione a pLista
pLista = pLista->succ;
questa assegnazione modifica pLista SOLO nell'ambiente della funzione; e in questo caso è giusto farlo poichè la stampa non deve modificare la lista.
PS: mi sembra ke l'errore sia quello e sottolineo il "mi sembra"
|