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' :
codice:
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;
}
"greater" funziona sicuramente bene perchè l'ho già usato per creare la lista ordinata, mentre equal è questa
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;
}