JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ff75ddbe653c51a6a59980378af7c5f8Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem mit Liste

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 09:35    Titel: Problem mit Liste Antworten mit Zitat

Hallo!

Um ein paar Items zu zeichnen wollte ich eine Liste verwenden. Nun stürzt das Programm leider immer ab und ich habe keine Ahnung wieso. Es stürzt ab wenn ich ein neues Item anlegen (Ich kann genau eines anlegen bei 2 stürzt es ab) will oder wenn ich in der while schleife bei DrawItems NULL != p abfrage. Kann mir einer helfen? Hier sind noch alle Funktionen. Die Variabeln sind in der Klasse definiert.

THX

Code:

void CGameManager::NewItem(int Number, D3DXVECTOR2 Pos)
{
   // Neues Item deklarieren
   Item* Element = new Item;

   // Initialisieren
   Element->Number = Number;
   Element->Pos = Pos;

   // Jetzt ist es das letzte
   LastItem()->Next = Element;
}

void CGameManager::DrawItems(void)
{
   Item* p = &Listenkopf;

   while(NULL != p)
   {
      // Alle zeichnen
      m_Sprite->Draw(40,40,0,4,p->Pos.x,p->Pos.y);
      // Auf das nächste Element setzen
      p = p->Next;
   }
}

Item* CGameManager::LastItem(void)
{
   Item* p = &Listenkopf;

   // Wenn das nächste nicht das letzte ist
   while(NULL != p->Next)
   {
      // Weiter
      p=p->Next;
   }

   // Letztes zurückgeben
   return p;
}


void CGameManager::DeleteItems(void)
{
   while(NULL != Listenkopf.Next)
   {
      Item* p = &Listenkopf;

      while(LastItem() != p->Next)
      {
         p = p->Next;
      }
      delete LastItem();
      p->Next = NULL;
   }
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 11:19    Titel: Antworten mit Zitat

1. Du könntest einfach STL Listen verwenden, die sind einfacher zu handhaben
2. Was ist den &Listenkopf? Mpste doch so was in der art
struct Element
{
int Inhalt
Element *pNächstes;
}
sein, oder?
wenn du ei nneues Element erstellst, muzss du dessen Next Zeiger natürlich auf NULL setzten, und das sehe ich in der Funktion Newitem nicht.

Du könntest auch mal versuchen mithilfe des Debuggwers das Problem zu finden. Müsste ja was mit Speicherzugriffsverletzung zu tun haben
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 14:42    Titel: Antworten mit Zitat

so eine Structr liegt auch vor. Ich habe dasselbe verwendet wie im Buch einfach andere Namen. Ich habe dank dem Debugger herausgefunden das die Fehler imemr bei der while überprüfung liegt, bei LastItem und Drawitems.

Zuletzt bearbeitet von Beni5 am 14.06.2004, 14:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fowly
JLI'ler



Anmeldedatum: 25.01.2004
Beiträge: 196
Wohnort: Detmold - NRW
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 14:45    Titel: Antworten mit Zitat

trozdem beni, du solltest stl listen nehmen, die sind nicht nur einfacher, sondern in den meisten fällen auch schneller.
_________________
<-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->

Das Spiel zu unserer Schule:

http://www.grabbe-game.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 14:51    Titel: Antworten mit Zitat

Ich denke mal der Fehler ist das du den NextZeiger nicht auf NULL setzt. Da der nicht von Anfang an NULL ist funktioniert die Schleife in der Last() Funktion natürlich auch nicht.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 15:00    Titel: Antworten mit Zitat

Und wie soll ich den auf NULL setzen? Es stimmt schon der Debugger sagt auch es liegt an Next. Und wenn ich ihn auf NULL setze wird er in der while Schleife ja immer als NULL erkannt und das Programm verliert seinen Sinn. Und ich weiss nicht ob du mit dem NextZeiger was falsches verstehst. Next ist ein Member von Item. Und von Templates halte ich mich fern. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 15:21    Titel: Antworten mit Zitat

Also die Struktur heißt
Item
{
int Number
int Pos
Item* pNext;
}

pNext zeigt immer auf das nächste Element aus der Liste. Wenn es das letzte Element ist, zeigt pNext auf NULL um zu verdeutlichen, das kein weiteres Item existiert.
Also, muss du, wenn du ein neues Elemtn erstellst den pNext Zeiger auch auf NULL setzen, da es dann doch das letzte Elemnt ist, nach dem keins mehr kommt:

Code:

void CGameManager::NewItem(int Number, D3DXVECTOR2 Pos)
{
   // Neues Item deklarieren
   Item* Element = new Item;

   // Initialisieren
   Element->Number = Number;
   Element->Pos = Pos;
   Element->pNext=NULL; //ganz ganz dolle wichtig!

   // Jetzt ist es das letzte
   LastItem()->Next = Element;
}

Probier das einfach ma aus.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 14.06.2004, 15:24    Titel: Antworten mit Zitat

O M G
Ich bin wirklich Blind!!! Ich hab's voll übersehen... Danke Very Happy Funktioniert Primaletti Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum