Salve, ho un problema con la cancellazione di elementi all’interno di una lista. Quello che volevo fare era, scorrere l’intera lista, se si verifica la condizione, cancellare l’elemento puntato, sia che l’elemento si trova in testa, coda o nel mezzo, e poi riusare la lista per poter aggiungere altri elementi. Il problema è che se libero la memoria FREE(temp) –vedi parte commentata- mi da errore perché il puntatore al ciclo successivo punta ad una allocazione della memoria inesistente. Quello che mi chiedo è giusto così come ho fatto? Come faccio a deallocare la memoria occupata visto che dopo un minuto supero i 2,5Gb di memoria?
codice:typedef struct elemento { int val; struct elemento *next; struct elemento *prev; }; struct elemento *cancellaElemento(struct elemento *pCanc){ struct elemento *temp; while(pCanc!=NULL){ if(condizione){ //caso in cui è l’unico elemento nella lista ad essere cancellato if(pCanc->next==NULL && pCanc->prev==NULL){ //free(pCanc); }else if(pCanc->prev==NULL && pCanc->){ temp=pCanc; pCanc->next->prev=NULL; //free(temp); //continue; }else if(pCanc->next==NULL){ temp=pCanc; pCanc->prev->next=NULL; //free(temp); //continue; }else if(pCanc->next!=NULL && pCanc->prev!=NULL){ temp=pCanc; pCanc->next->prev=pCanc->prev; pCanc->prev->next=pCanc->next; //free(temp); } } pCanc=pCanc->next; } return pCanc; }