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

11

13.09.2008, 20:09

kk also hier wieder die variablen in der header datei:

C-/C++-Quelltext

1
2
3
LevelObject*            m_TemplateObjects[512];             // Schablone der Level-Objekte

std::list<LevelObject*>     m_Objects;                      // Level-Objekte

    


und der quelltext:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    for (unsigned long i = 0; i < 512; ++i)
    m_TemplateObjects[i] = new LevelObject();


        // hier werden die LevelObject-Schablonen mit Werten gefüllt

        // Diese sollen später in die Liste kopiert werden

    LoadObjectTypes(true);

    m_Objects.push_front(m_TemplateObjects[0]);
    


jo, hat sich auch nicht wirklich viel geändert^^

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

13.09.2008, 21:34

Normalerweise zeigt der Debugger genaue Informationenen an, wenn das Programm aus der IDE im Debugmodus, als Debugversion erstellt, startet. Auch wird in der Ausgabe der IDE entsprechende Infos angezeigt (Normalerweise!).
Versuch mal folgende Variante:

C-/C++-Quelltext

1
    for (unsigned long i = 0; i < 512; ++i)     m_Objects.push_front( new LevelObject());


Es lässt deine Methode erstmal außen vor und beschränkt sich auf das wesentliche. Kommt dann der Fehler immernoch?
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.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

14.09.2008, 00:27

Also an dem gezeigten Ausschnitt ist nichts verkehrt. (Mal abgesehen, dass ich mich frage, warum du ein Array und eine Liste hast. ;) von dem fehlendem delete's mal ganz zu schweigen).

Darum würde ich auf etwas ganz anderes Tippen. Nämlich einen Zeiger, den du sonst irgendwo in deinem Programm nicht löscht und dann darauf zugreifst. Das kann die Fehlermeldung an einen völlig unerwarteten Punkt verschieben. Und die Fehlermeldung hilft dir in so einem Falle auch nicht wirklich weiter.

Also mal diesen Ausschnitt rausnehmen und nochmal probierne. Wenn der Fehler dann wo anders kommt, dann wünsche ich dir viel Spass mit dem Debugger. ;) (Kleiner Tipp: Kommentier mal möglichst viel Code aus und dann Schritt für Schritt wieder aktivieren. Dann siehst du relativ schnell, wo der Fehler ist.)

14

14.09.2008, 14:38

@Nox

also der Debugger zeigt mir beim Absturz eine Message-Box in der steht: "Unbehandelte Ausnahme in Programm.exe: 0xC0000005: Access Violation."

der Verursacherer scheint das hier zu sein:

C-/C++-Quelltext

1
2
    iterator begin()
        {return (iterator(_Acc::_Next(_Head))); }


(steht in "list")

hab hier noch den Inhalt von _Head, kann selber nichts damit anfangen, hoff mal ihr wisst mehr darüber:


Name: Wert:
_Head 0x00000000

- _Next CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden

- _Prev CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden

- _Value CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden

@drakon

1. Die delete's sind vorhanden, habe nur gedacht das die nicht weiter wichtig wären für den Quellcode

2. Wenn ich den Ausschnitt rausnehme, kommt zwar das Problem nicht mehr an dieser Stelle, aber gleich bei der nächsten Stelle, bei der ich auf die m_Objects-Liste zugreife. Dabei zeigt mir der Debugger die gleiche Message-Box an und die Die Werte für Head sind ähnlich, mit dem einzigen Unterschied, dass bei _Value CXX017: Fehler: Symbol "" nicht gefunden steht

der Code in dem der Fehler entsteht:

C-/C++-Quelltext

1
for (m_ObjectRender = m_Objects.begin(); m_ObjectRender != m_Objects.end(); m_ObjectRender++)


(btw. m_ObjectRender ist vom Typ std::list<LevelObject*>::iterator ) Hierbei versteh ich aber, dass der Debugger einen Fehler ausgibt, schließlich wurde die Liste noch nicht mit Werten gefüllt

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

15

14.09.2008, 14:57

Wie gesagt. Das weist mich darauf hin, dass du wirklich irgendwo einen Zeiger benutz, der bereits freigegeben wurde. Das er dann in in die STL verweist ist ein typischesn Zeichen dafür, aber sich nicht das Problem. In der STL wird der Fehler mit 99.999% Wahrscheinlichkeit nicht sein. ;)

Zitat

for (m_ObjectRender = m_Objects.begin(); m_ObjectRender != m_Objects.end(); m_ObjectRender++)

Wenn m_ObjectRender ein gültiger Iterator ist, dann kann das auch nicht das Problem sein.

Such den Fehler ganz wo anders. Kommentier mal möglichst viel aus und dann Schrittweise ein, bis der Fehler wieder kommt.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

16

14.09.2008, 18:18

nopaste.com -> bitte die komplette Methode/Funktion/Klasse reinpacken. Ich tippe darauf, dass es eine Methode ist und dass this gleich 0 oder der gleichen ist.
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.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

17

14.09.2008, 18:50

mensch junges er will doch nur den zeiger aus dem array in die list pushen. warums net geht ist ne gute frage, was kommt denn für ein fehler? bau mal ein try um die kritische anweisung drum rum und fang mal mit catch(std::exception &e) {std::cout << e.what();} ab. dann hast du zumindest ne meldung in der konsole.

Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

18

14.09.2008, 18:54

Zitat von »"Faule Socke"«

mensch junges er will doch nur den zeiger aus dem array in die list pushen. warums net geht ist ne gute frage, was kommt denn für ein fehler? bau mal ein try um die kritische anweisung drum rum und fang mal mit catch(std::exception &e) {std::cout << e.what();} ab. dann hast du zumindest ne meldung in der konsole.

Socke


Da wird er aller Voraussicht nach kein Ergebnis bekommen. Sieht eher nach einer Hardwareexception aus.
@D13_Dreinig

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

19

14.09.2008, 18:58

Dann ist eventuell der this zeiger schrott. Normal sollte es doch kein problem sein, einen zeiger in ne liste mit zeigern zu pushen, egal, wohin der zeiger nun seinen schmutzfinger hält.

Socke

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

20

14.09.2008, 20:45

@Socke, hättest du ein wenig aufmerksamer mitgelesen, hättest du mitbekomme, was sein Debugger ihm sagt (mit einem Try&Catch erhält man, soweit ich weiß, nicht mehr Infos als mit dem Debugger, wenn man diesen gescheit einstellt). Mit dem this wurde übrigens auch schon erwähnt. Mehr lässt sich erst sagen, wenn man mehr vom Code sieht.
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.

Werbeanzeige