flexibel Array

AckiB

Mitglied
Hi,
ich versuche ein flexibles Array zu erstellen, habe aber Probleme damit...
Ich habe eine Struktur roomDat.
Beim 1. und 2. Aufruf von addRoom() ist alles OK, allerdings wird die 2. Instanz nicht angelegt, da bei jedem weiteren Mal immer ID = 2 zurückgegeben wird...

Code:
extern roomDat* Raum;
int cSpiel::addRoom(){
  /* TODO (AB#1#): neuen Raum erstellen, ID zurückgeben */
  int ID = 0;
  if(!Raum){
    Raum = (roomDat*)malloc(sizeof(roomDat)); 
    Raum->Prev = NULL;
    Raum->Next = NULL;
    Raum->ID = ++ID;
    sprintf(Raum->Name, lang[7], ID);
    Raum->Mesh = NULL;
    Raum->Node = NULL;    
    wnd_Anfang.addRoom(Raum->Name, Raum->ID);
  }else{
    roomDat* tmp = Raum;
    roomDat* tmp2 = NULL;
    while(tmp){
      if(tmp->ID > ID) ID = tmp->ID;
      tmp2 = tmp;
      tmp = tmp->Next;
    }
    tmp = (roomDat*)malloc(sizeof(roomDat)); 
    tmp->Prev = tmp2;
    tmp->Next = NULL;
    tmp->ID = ++ID;
    sprintf(tmp->Name, lang[7], ID);
    tmp->Mesh = NULL;
    tmp->Node = NULL;    
    wnd_Anfang.addRoom(tmp->Name, tmp->ID);
  }
  return ID;
}

Was ist falsch ?
 
Hy!

Zeig mal dein Struct, dann können wir dir besser helfen.

Frage am Rande: Das ist doch kein Array, sondern eine doppelt verkettete Liste, oder?
(sieht zumindest so aus)

mfg
uhu01
 
Ich weiß nicht ob das hilft, aber anstatt ID in der while-Schleife hochzuzählen,
könntest du sinnvoller nach dem Anlegen des nächsten Objekts
Code:
tmp->ID = tmp->Prev->ID + 1;
schreiben.

Ich steig grad nicht ganz durch, aber ich habe die Vermutung, daß bei dir
alles funktioniert, außer der Vergabe der ID...

Vielleicht hilfts ja, viel Erfolg
BadMourning
 
Vergiss, was ich geschrieben habe, ich weiß was bei dir falsch ist.

Du hast vergessen, deinem Vorgänger dich als Nachfolger anzugeben.
Der war immer NULL und deshalb ist er immer in der while-Schleife immer
ausgestiegen.

Code:
...
    tmp = (roomDat*)malloc(sizeof(roomDat)); 
    tmp->Prev = tmp2;
    tmp->Next = NULL;
    tmp->ID = ++ID;

    tmp->Prev->Next = tmp;

    sprintf(tmp->Name, lang[7], ID);
    tmp->Mesh = NULL;
    tmp->Node = NULL;    
    wnd_Anfang.addRoom(tmp->Name, tmp->ID);

...

BadMourning
 
Zurück