Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

1

10.11.2004, 23:21

Verkettete Liste macht Probleme

In meinem derzeitigen Projekt, den "Textadventure Maker 3000" habe ich ein kleines Problem. Ich wollte vorgestern von char xyz[1000] Arrays auf verkettete Listen umsteigen. Ich benutzte noch die ganz coolen oldschool Listen aus Zerbst Band 1. Hier mal das Problem:

C-/C++-Quelltext

1
2
3
ItemOnPC Item;   //Hier wird mal so ein Itemeintrag erstellt

/*Hier wird er gefüllt, aber egal ob ichs auskommentier oder nicht, bringt nix*/
CurrentProject.Items.Insert(&Item); //Hier wird er in die verkettete Liste geladen.

die Funtkion indem das Item geladen wird macht Probleme. Andere Listeneinträge funktionieren, woran kann das liegen?
Damit klar ist was ein Item ist:

C-/C++-Quelltext

1
2
3
4
5
6
typedef struct SItemOnPC
{
    int Number;
    Liste LCommands;
    Liste LAnswers;
}ItemOnPC;

Und jetzt nochmal der Ausschnitt wo der Debugger hinzeigt, wenn die Insert(&Item) Funktion ausgeführt wird:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Liste::Liste()
{
    plist=(Listenelement*)malloc(sizeof(Listenelement));
    plist->pData=NULL;
    plist->next=NULL;
}

bool Liste::Insert(void *data)
{
    

    //1. Fall: LEERE LISTE


    if(plist->pData==NULL) //HIER ZEIGT ER HIN

    {
        plist->pData=data; //und wenn ich if(1) hinschreibe zeigts hier hin

        return 1;
    }
    //2. Fall: NICHT LEERE LISTE

    
    Listenelement *Newelement;

    Newelement=(Listenelement*)malloc(sizeof(Listenelement));
    if(Newelement==NULL)
        return 0;
    else 
    {
        //Daten speichern Zeiger setzen

        Newelement->pData=data;
        Newelement->next=plist;
        plist=Newelement;
        return 1;
    }
}


Wie gesagt, alle anderen Versuche, andere Klassen oder Strukturen in eine Liste zu laden waren erfolgreich! Hat jemand eine Idee? Danke! :)

Anonymous

unregistriert

2

11.11.2004, 09:08

Deutet darauf hin dass pList NULL ist, fragt sich natürlich nur warum. Hast du das ganze mal schrittweise im Debugger getestet? Wird der Konstruktur von Liste ordnungsgemäß durchlaufen? Wird dort pList ein Wert != NULL zugewiesen?

3

11.11.2004, 15:10

Was passiert eigentlich mit dem Item das du in die Liste stopfst? Dir ist klar das es erhalten bleiben muss und damit der Sinn einer List nicht ganz erfüllt ist?

Wenn pList == 0, wird keine exception geworfen. Wo wird das abgefragt?

Im Kontruktor solltes du kein Listen Element erstellen. Das sollte erst in Insert passieren. Dort wird dann nämlich au abgefragt ob pList == NULL ist ;)


PS:
Bitte nutz einfach std::list. Das ist sicher und erprobt und nicht wircklich nicht schwer zu handhaben. Man muss ja nicht immer das Rad neu erfinden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

DrthM2001

Alter Hase

  • »DrthM2001« ist der Autor dieses Themas

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

4

11.11.2004, 16:09

Die Liste war schon korrekt, aber ich hatte die Liste global deklariert, und somit wurde anscheinend der Konstruktor nicht ausgeführt. Das wusste ich nicht. Also habe ich ihn manuell ausgeführt, und jetzt gehts. Aber diese verdammte Liste macht immernoch Probleme, deshalb werd ich std::list benutzen. Danke für die hilfe!

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

11.11.2004, 16:25

interessantes thema:
https://www.spieleprogrammierer.de/index.php?option=com_forum&Itemid=43&page=viewtopic&t=2470

Vokabeltrainer und Adventures sind zwar unterschiedliche Sachen doch ähneln tun sie sich schon sehr :)

Werbeanzeige