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

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

1

27.11.2013, 18:12

tbExit() im Dekonstruktor löst "0xC0000005 Zugriffsverletzung aus"

Hallo Community,

ich habe ein Spiel mit der TriBase-Engine angefangen zu programmieren. Alles läuft soweit gut, bis ich heute meine Init() und Exit() Methoden in (De-)Konstruktor umschreiben wollte. Mein Dekonstruktorcode sieht folgendermaßen aus:

C-/C++-Quelltext

1
2
3
4
5
6
BlockWorld_Main::~BlockWorld_Main()
{
    SetState(BlockWorld_State::None);
    tbDirect3D::Instance().Exit();
    tbExit();
}


Im Debugger werden alle drei Schritte Fehlerfrei ausgeführt, nur wenn zur "}" gesprungen wird, bekomme ich folgende MessageBox:

Zitat

Unbehandelte Ausnahme bei 0x5930c5b4 in Main.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefef6.


Versuchsweise hab ich mal den letzten Befehl "tbExit();" auskommentiert - und siehe da, der Fehler ist weg!? Aber das kann ich doch nicht so lassen, die Engine muss doch ornungsgemäß beendet werden, oder nicht!? "tbExit();" wird an keiner anderen Stelle im Programm aufgerufen. Der Dekonstruktor wird durch "delete" aufgerufen.

Wenn ich die drei Befehle über eine "Exit()"-Methode aufrufe und danach dann "delete" (mit leerem Dekonstruktor), dann funktionierts.
Fragt nicht warum ich das anders machen will - es ist ein Test, obs einfacher geht! Und jetzt nicht Antworten: "Na siehste doch was einfacher geht". :D

Ich hab die Forumssuche bemüht, doch nichts passendes gefunden. Wenn ich trotzdem was übersehen haben sollte, dann sagt Bescheid!

Wer kann mir helfen? Ich benutze Visual Studio 2010 Professional und Win7.

Danke schonmal für eure Hilfe.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

27.11.2013, 18:49

Das Wort ist "Destruktor". Über den Rest weiß ich nix.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

3

27.11.2013, 20:55

Hast ja recht Alter (K.A wie alt du bist)! :D Da seht ihr mal wie am Ende ich bin! Du machst mir Mut. :(
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

4

05.12.2013, 18:20

Problem gelöst! Ich hab meinen Fehler gefunden ;) Kann ein Moderator diesen Thread schließen? Muss man das überhaupt?
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

05.12.2013, 18:34

Irgendwann wirst du mal über ein Problem stolpern und nach einer Stunde google einen Forenbeitrag mit GENAU deinem Problem finden unter dem dann auch eine Antwort steht "Habs gelöst kann geschlossen werden"... in diesem Augenblick wirst du ernsthaft darüber nachdenken wie schnell wohl so eine Gefängnisstrafe wegen Mord rumgehen könnte.

Schreib doch WIE du dein Problem gelöst hast, damit jemand anderem dieser Gedankengang erspart bleibt.

Und nein natürlich muss der Thread nicht geschlossen werden. Warum auch?

CeDoMain

Alter Hase

  • »CeDoMain« ist der Autor dieses Themas

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

6

06.12.2013, 18:17

Irgendwann wirst du mal über ein Problem stolpern und nach einer Stunde google einen Forenbeitrag mit GENAU deinem Problem finden unter dem dann auch eine Antwort steht "Habs gelöst kann geschlossen werden"... in diesem Augenblick wirst du ernsthaft darüber nachdenken wie schnell wohl so eine Gefängnisstrafe wegen Mord rumgehen könnte.
Jo, da is was dran! Ich versuchs mal zu erklären:

Also durch SetState(None) wird nur die Exit-Methode des "ausgeführten" State aufgerufen. Aber das ist noch nicht alles, weil das Objekt des State weiterhin besteht. Dieses muss ich mit delete löschen, bevor ich tbExit() aufrufe, weil der State TriBase-Komponenten verwendet.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
BlockWorld_Main::~BlockWorld_Main()
{
    SetState(BlockWorld_State::None);
    delete BWGame;

    tbDirect3D::Instance().Exit();
    tbExit();
}


Ich hoffe das war verständlich! :S Wer mich Ermorden will, der soll mich bitte VORHER per PM informieren! :D
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Werbeanzeige