verkette Liste löschen



  • Wenn ich eine kurze Liste habe, kann ich sie ohne Probleme löschen. Wenn sich jedoch mehr als 5 Datensätze darin befinden, Kommt beim Aufruf der Funktin zum Löschen der Liste folgende Fehlermeldung:

    Unbeahndelte Ausnahme: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    ar free(VOID* )
    at loesche_all(person* anfang)
    at main()

    Hier die Funktion:

    struct ware * loesche_all_ware(struct ware *anfang)
    {
    	struct ware *zeiger, *zeiger1;
    
    	if(anfang != NULL)
    	{
    		zeiger=anfang->next;
    		while(zeiger != NULL)
    		{	zeiger1=anfang->next->next;
    			anfang->next=zeiger1;
    			free(zeiger->next);
    			free(zeiger);
    			zeiger=zeiger1;
    		}
    		free(anfang->next);
    		free(anfang);
    		anfang=NULL;
    		printf("\n\nListe wurde erfolgreich gel\224scht!\n\n");
    		return anfang;
    	}
    	else
    		printf("\n\nKeine Liste zum l\224schen vorhanden\n\n\a");
    		return anfang;
    }
    
    struct ware
    {
    	char name[MAX];
    	char hersteller[MAX];
    	float preis;
    	struct ware *next;
    };
    


  • weiss zwar nicht wie deine liste genau organisiert ist aber normalerweise würde ich etwa so vorgehren:

    void loesche_all_ware(struct ware *anfang)
    {
        struct ware *tmp;
        while ( NULL != anfang) {
            tmp=anfang->next;
            free(anfang);
            anfang = zeiger;
        }
    }
    

    Kurt



  • Hi, danke dir. Ist natürlich viel einfacher. Hast bloß einen kleinen Schreibfehler drin. Außerdem ging es bei mir erst, wenn ich den anfang der Liste wieder zurückgebe, also so:

    struct ware * loesche_all_ware(struct ware *anfang)
    {
        struct ware *tmp;
        while ( NULL != anfang) {
            tmp=anfang->next;
            free(anfang);
            anfang = tmp;
        }
    }
    


  • sorry wg dem typo.
    wenn du unbedingt etwas zurückgeben musst dann am besten so.

    struct ware * loesche_all_ware(struct ware *anfang)
    {
        struct ware *tmp;
        while ( NULL != anfang) {
            tmp=anfang->next;
            free(anfang);
            anfang = tmp;
        }
        return NULL;
    }
    

    Kurt


Anmelden zum Antworten