LISTE

di il
1 risposte

LISTE

Ciao a tutti, devo occuparmi della realizzazione di una funzione che: data una lista di interi, per ogni elemento di valore pari, elimini il successivo. Ho inserito i valori nella lista, ma ho un problema in esecuzione, quando chiamo la funzione relativa all'eliminazione:

void elimina_dopoPari(){
     struct numero *cur, *aux;
     aux = NULL;
     cur = first;
     while(cur != NULL){
               if((cur -> info % 2) == 0){
                       aux = cur;
                       free(cur -> next);
                       cur = aux -> next;
                       }
               else{
               aux = cur;
               cur = cur -> next;
               }
               
               }
}
Qualcuno sa dirmi dove sbaglio?

1 Risposte

  • Re: LISTE

    Ciao! Se non sbaglio l'errore dovrebbe accadere quando trovi un numero pari, ovvero quando esegui questa porzione di codice:
    if((cur -> info % 2) == 0){
       aux = cur;
       free(cur -> next);
       cur = aux -> next;
    }
    In pratica con la free cancelli l'elemento successivo, ma prima di fare ciò non modifichi il campo "cur->next" con il valore appropriato (ovvero cur->next->next, ipotizzando che cur->next non sia NULL). Senza questo passaggio intermedio quando poi vai a fare "cur = aux->next" ti ritrovi che cur punta all'elemento che hai appena cancellato!

    Inoltre, per quanto riguarda l'else potresti fare direttamente "cur = cur->next", eliminando la prima riga che, di fatto, è inutile!
Devi accedere o registrarti per scrivere nel forum
1 risposte