Problem mit Liste



  • Guten Tag,

    ich bin ziemlich unerfahren was C++ angeht. Habe aber schon Erfahrung mit Java, und wir haben in der Schule mal eine Liste programmiert. Da ich jetzt dabei bin C++ zu lernen, wollte ich mal eine Liste programmieren. Dazu hab ich eine Klasse Listenelement erstellt, deren Objekte, wie der Name schon sagt die Elemente der Liste sind. Um Zugriff auf die Liste zu haben, habe ich im Hauptprogramm einen Zeiger auf den Anfang der Liste definiert. Fügt man das erste Element in die Liste ein, sollte der Zeiger auf genau dieses Listenelement zeigen. Das Problem bei mir ist nun, dass, wenn ich noch mehr Elemente hinzufüge, der Zeiger auf den Anfang plötzlich nicht mehr auf das erste Element zeigt.

    Hier mal der Code:

    #include <iostream>
    #include "listenelement.h"

    Listenelement *anfang;
    int anzahl;

    void ListenelementEinfuegen();
    void ListenelementeAusgeben();

    int main(){
    anzahl=0;
    ListenelementEinfuegen();
    ListenelementEinfuegen();
    anfang->NummerAusgeben();
    int i;
    std::cin >> i;
    return 0;
    }

    void ListenelementEinfuegen()
    {
    Listenelement neu(anzahl);
    anzahl = anzahl + 1;
    std::cout << anzahl;
    if (anzahl==1){ anfang=&neu;}
    else {anfang->ListenelementEinfuegen(neu);}
    }

    void ListenelementeAusgeben()
    {
    anfang->ListenelementAusgeben();
    }

    und die Klasse Listenelement:
    class Listenelement {
    private:
    Listenelement *nachfolger;
    int nummer;
    public:
    Listenelement(int nr)
    {
    nummer = nr;
    nachfolger = this;
    }
    void ListenelementAusgeben()
    {
    std::cout << "Listenelement Nr. " << nummer << "!\n";
    if (nachfolger!=this) nachfolger->ListenelementAusgeben();
    }
    void NachfolgerSetzen(Listenelement nachf)
    {
    nachfolger = &nachf;
    }
    void ListenelementEinfuegen(Listenelement neu)
    {
    if (nachfolger==this) {NachfolgerSetzen(neu);}
    else {nachfolger->ListenelementEinfuegen(neu);}
    }
    void NummerAusgeben()
    {
    std::cout << nummer;
    }
    };

    Danke schonmal im Vorraus für jegliche Antworten und Hilfen! 😉



  • In der ListenelementEinfügen()-Funkion biegst du den Zeiger Anfang auf eine lokale Variable, die am Ende er Funktion zerstört wird. Was du danah mit dieser Variable machst, ist undefiniertes Verhalten.
    Ich fürche, wenn du das wirklich selber umsetzen willst, kommst du um dynamische Speicherverwaltung (new/delete) nicht herum. Aber ansonsten empfehle ich eher, die Möglichkeiten der Standardbibliothek (std::list<>) zu nutzen.



  • Okay, danke für die Info. Habs verstanden was der Fehler ist!


Log in to reply