Salve a tutti. Non riesco a cancellare un nodo di una lista, in particolare ricevo come errore " segmentation fault". Il main e la struttura sono i seguenti :
codice:int main() { t_info inf; t_list lista=NULL; int scelta=1; while(scelta!=0) { inf=read_info(); lista=node_insert(lista,inf); printf("Vuoi inserire un'altro nominativo? 1/0 \n"); scanf("%d",&scelta); } print_list(lista); printf("Quale nominativo vuoi cancellare?\n"); inf=read_info(); lista=node_delete(lista,inf); print_list(lista); return EXIT_SUCCESS; }codice:struct s_info { char nome[15]; char cognome[15]; int eta; };
e prima della "node_delete" non ci sono errori perchè va tutto bene. La funzione e' :
"greater" funziona sicuramente bene perchè l'ho già usato per creare la lista ordinata, mentre equal è questacodice:t_list node_delete(t_list lista,t_info inf) { t_node* prec=NULL; t_node* curr=lista; while((curr!=NULL) && greater(inf,curr->info)) { prec=curr; curr=curr->link; } if(prec!=NULL && equal(inf,curr->info)) { if(prec==NULL) { lista=curr->link; } else { prec->link=curr->link; } free(curr); return lista; } return lista; }
codice:bool equal(t_info info1,t_info info2) { if( ((strcmp(info1.nome,info2.nome))==0) && ((strcmp(info1.cognome,info2.cognome))==0) && (info1.eta==info2.eta)) return true; else return false; }

Rispondi quotando