Programm hängt sich in Funktion auf



  • Hallo,

    habe ein Problem mit meinem Programm. Wir sollen für die Uni eine verkettete Liste programmieren. In einer Funktion soll das Programm einen Eintrag löschen. Wenn jetzt kein Eintrag vorhanden ist soll das Programm dem User mitteilen, dass keine Einträge vorhanden sind und zurück ins Menü gehen.

    Wenn in meiner Funktion dies der Fall ist hängt sich mein Programm auf. Wie kann ich es hinbekommen, dass es sich nicht aufhängt und zurück ins Ausgangsmenü geht?

    Hier mein Quellcode der Funktion:

    void loeschen(element* ptr)
    {
        struct eintrag * vorgaenger;
        char wort[20];
    
        if(liste != NULL)
        {
            printf("Welches Wort wollen Sie loeschen?: ");
            scanf("%s", &wort);
    
            while (ptr!=NULL && strcmp(ptr->wort, wort))
    	    {
    		    vorgaenger = ptr;
    		    ptr = ptr->next;
    	    }
    
            if (ptr!=NULL)
    	    {
                if (ptr == liste)	liste = ptr->next;
    		    else	vorgaenger->next = ptr->next;
    	    }
    
            free (ptr);
    	    //printf("\n");
    	    return;
        }
    
        else if(liste==NULL)
        {
            printf("Keine Eintraege vorhanden");
            free (ptr);
            return;
    
        }
    }
    


  • Ahja.

    ist Deine "liste" global definiert?
    Bemühe doch mal einen Debugger, um die Zeile festzustellen, die nicht behagt.
    Wenngleich man schon einen leisen Verdacht hegen darf, wenn man sich den Quellcode so ansieht...

    Ein free() auf einen Pointer, für den kein Speicher alloziert wurde, wird zum Knall führen. Abgesehen davon, dass Du vogelwild mit typedefs, structs, globals und unübersichtlichen if-Kaskaden um dich schmeißt, würdest Du auch bei zufriedenstellender Funktionalität eine miese Bewertung für den Code bekommen.


Anmelden zum Antworten