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

NicoWe

Treue Seele

  • »NicoWe« ist der Autor dieses Themas

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

1

28.03.2008, 15:17

std::list zugriffsfehler

Hallo

Ich habe ein Problem mit std::list. Ich habe eine Klasse die als Membervariable u.a. eine liste mit Pointern auf eine andere Klasse hat. Wenn ich jedoch auf diese Liste zugreifen möchte bekomme ich einen Fehler. Dabei habe ich vorher mit dieser liste nichts gemacht ausser die Variable deklariert. Doch jetzt erstmal ein wenig Code:

Fight.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//...

class CFight
{
private:
std::list<CUnit*> m_lUnits;
//...

public:
void Update();
//...

}; 
//...


Fight.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
//...

void CFight::Update()
{
if(!m_lUnits.empty())   //<- Abbruch des Programms

{
//...

}
//...


vor dem Aufruf von .empty() habe ich nichts anders mit der liste gemacht.
Eine <CUnit> liste bekommt den gleichen Fehler und
wenn ich vorher ein Objekt einfüge oder die Liste leere stürzt es immer noch ab.

Für hilfe wäre ich sehr dankbar
NicoWe
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

2

28.03.2008, 15:38

Evtl. ist dein Fightobjekt nicht initialisiert?
std::list ist extrem Fehlerfrei, also ist zu 99,5% sicher, dass der Fehler bei dir liegt. In dem von dir geposteten Code sehe ich allerdings keinen Fehler.

Aber es könnte gut sein, dass das Objekt nicht existiert und damit auch nicht die Liste. Wäre jetzt meine einzige Idee, ohne mehr Code kann ich nicht mehr sagen.
Lieber dumm fragen, als dumm bleiben!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

28.03.2008, 15:47

@Topic: Zeig mal den Konstruktor von CFight.

Zitat von »"Jonathan_Klein"«

Evtl. ist dein Fightobjekt nicht initialisiert?
std::list ist extrem Fehlerfrei, also ist zu 99,5% sicher, dass der Fehler bei dir liegt. In dem von dir geposteten Code sehe ich allerdings keinen Fehler.

Aber es könnte gut sein, dass das Objekt nicht existiert und damit auch nicht die Liste. Wäre jetzt meine einzige Idee, ohne mehr Code kann ich nicht mehr sagen.


Woher willst du wissen das std::list extrem Fehlerfrei ist? :) Es kann doch unendlich viele Implementierungen davon geben... :p
@D13_Dreinig

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

28.03.2008, 15:57

Wenn das Programm abschmiert, welchen Wert hat der this-Zeiger dann?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

NicoWe

Treue Seele

  • »NicoWe« ist der Autor dieses Themas

Beiträge: 126

Wohnort: Bielefeld / NRW

  • Private Nachricht senden

5

28.03.2008, 17:34

Oh...

Man, dass der Fehler so einfach sein kann! :lol: Ihr habt recht, ich hab vergessen die Klasse zu instanzieren.
Danke für die Hilfe :D
Erfolg ist die Fähigkeit, von einem Misserfolg zum anderen zu gehen,
ohne seine Begeisterung zu verlieren.
-Winston Churchill-

6

28.03.2008, 18:33

Zitat von »"David_pb"«


Woher willst du wissen das std::list extrem Fehlerfrei ist? :) Es kann doch unendlich viele Implementierungen davon geben... :p


Stimmt natürlich. Ich war davon ausgegangen das ein halbwegs gebräuchlicher Compiler benutzt wird, und da std::list so oft benutzt wird und auch nciht so extrem komplex ist würden Bugs sehr schnell auffallen.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige