Programm hängt sich auf! Templatevererbungsproblem
-
Hi,
ich bin langsam regelrecht am verzweifeln! Seit ca. 2 Stunden hänge ich nun an einem Laufzeit fehler aber finde ihn net
Beim Starten des Programmes bekomme ich folgenden Fehler:
Unhandled exception at 0x004603f6 in Tutorial 4.exe: 0xC0000005: Access violation writing location 0x004b46f4.
Das wird außerdem ausgespuckt:
- _pFirstBlock 0x004b46f0 const CVector3<float>::`vftable' _CrtMemBlockHeader * + pBlockHeaderNext 0x0043b8d3 CVector3<float>::`scalar deleting destructor'(unsigned int) _CrtMemBlockHeader * + pBlockHeaderPrev 0x0043a956 CWorldTile::`vector deleting destructor'(unsigned int) _CrtMemBlockHeader * - szFileName 0x00000000 <Bad Ptr> char * CXX0030: Error: expression cannot be evaluated char nLine 1852534357 int nDataSize 1696626543 unsigned int nBlockUse 1885692792 int lRequest 1852795252 long - gap 0x004b470c "!" unsigned char [4] [0] 33 '!' unsigned char [1] 0 unsigned char [2] 0 unsigned char [3] 0 unsigned char - _pFirstBlock->pBlockHeaderPrev 0x0043a956 CWorldTile::`vector deleting destructor'(unsigned int) _CrtMemBlockHeader * + pBlockHeaderNext 0x01d2c5e9 _CrtMemBlockHeader * + pBlockHeaderPrev 0x82d0e900 _CrtMemBlockHeader * - szFileName 0xdbe90005 <Bad Ptr> char * CXX0030: Error: expression cannot be evaluated char nLine -385874847 int nDataSize 169638 unsigned int nBlockUse 26517993 int lRequest 1071442176 long - gap 0x0043a972 "" unsigned char [4] [0] 4 '␄' unsigned char [1] 0 unsigned char [2] 233 'é' unsigned char [3] 119 'w' unsigned char - pHead 0x08890790 _CrtMemBlockHeader * + pBlockHeaderNext 0xbaadf00d _CrtMemBlockHeader * + pBlockHeaderPrev 0xbaadf00d _CrtMemBlockHeader * + szFileName 0xbaadf00d <Bad Ptr> char * nLine -1163005939 int nDataSize 3131961357 unsigned int nBlockUse -1163005939 int lRequest -1163005939 long - gap 0x088907ac " ðº ðº 𺫫««««««" unsigned char [4] [0] 13 '␍' unsigned char [1] 240 'ð' unsigned char [2] 173 '' unsigned char [3] 186 'º' unsigned char
Hier der Code der Dateien die ich benutze:
// Datei: CVector3.h // ////////////////////////////////////////////////////////////////////////////////// // Autor: Patrick Ullmann © Xarent Interactive // Erstellt: 20.11.03 // Änderungen: 20.11.03 (Patrick) Datei erstellt // ////////////////////////////////////////////////////////////////////////////////// // Beschreibung: Struktur zur Rechnung mit Vectoren #ifndef _CVECTOR3_H_ #define _CVECTOR3_H_ // I N C L U D E S ////////////////////////////////////////////////////////////////// #include <cmath> // D E F I N I T I O N E N ////////////////////////////////////////////////////////// // Noch keine // S T R U K T U R E N ////////////////////////////////////////////////////////////// template<class T> class CVector3 { public: // Constructor CVector3 (T x = T(), T y = T(), T z = T()) : m_x(x), m_y(y), m_z(z) {} // Destructor virtual ~CVector3<T> (void) {}; // Diverse get- und set-Funktionen inline T getX (void) const { return (this->m_x);} inline T getY (void) const { return (this->m_y);} inline T getZ (void) const { return (this->m_z);} inline void setX (T &t) { this->m_x = t;} inline void setY (T &t) { this->m_y = t;} inline void setZ (T &t) { this->m_z = t;} void setVector (T &x, T &y, T &z); // Wichtige Grundoperatoren const CVector3<T> operator- (const CVector3<T>&) const; const CVector3<T> operator+ (const CVector3<T>&) const; T operator* (const CVector3<T>&) const; CVector3<T> operator* (T &value) const; CVector3<T> operator/ (T &value) const; CVector3<T> operator/ (const CVector3<T>&) const; CVector3<T>& operator= (const CVector3<T>&); CVector3<T> operator- (void); CVector3<T>& operator+= (const CVector3<T>&); CVector3<T>& operator-= (const CVector3<T>&); CVector3<T>& operator*= (const CVector3<T>&); CVector3<T>& operator*= (T&); CVector3<T>& operator/= (const CVector3<T>&); CVector3<T>& operator/= (T&); // Grundlegende Mathematische Funktionen CVector3<T> crossProduct (const CVector3<T>&) const; CVector3<T> dotProduct (const CVector3<T>&) const; CVector3<T> normalize (void); T magnitude (void) const; T magnitudeQuad (void) const; protected: // Der eigentliche "Vector" T m_x; T m_y; T m_z; }; #endif
// Datei: CBoundingBox.h // ////////////////////////////////////////////////////////////////////////////////// // Autor: Patrick Ullmann © Xarent Interactive // Erstellt: 20.11.03 // Änderungen: 20.11.03 (Patrick) Datei erstellt // ////////////////////////////////////////////////////////////////////////////////// // Beschreibung: Struktur für BoundingBoxen #ifndef _CBOUNDINGBOX_H_ #define _CBOUNDINGBOX_H_ // I N C L U D E S ////////////////////////////////////////////////////////////////// #include "..\\math\\CVector3.h" #include "..\\core\\CVideo.h" // D E F I N I T I O N E N ////////////////////////////////////////////////////////// // Noch keine // S T R U K T U R E N ////////////////////////////////////////////////////////////// class CBoundingBox { public: // Constructor CBoundingBox (void) : m_Collidable (true) {} // Destructor virtual ~CBoundingBox (void) {} // Diverse set-Funktionen. void setCollidable (bool value) { this->m_Collidable = value; } void setBBPosition (CVector3<float>); void setBBMin (CVector3<float>); void setBBMax (CVector3<float>); // Diverse get-Funktionen CVector3<float> getBBPosition (void); CVector3<float> getBBMin (void); CVector3<float> getBBMax (void); // Kann die BoundingBox mit irgendetwas Kollidieren? inline bool isCollidable (void) { return (this->m_Collidable); } // Funktion zum rendern der BoundingBox. void renderBoundingBox (void); // Kollisionsfunktionen für BB mit BB und BB mit Point. bool collidesWith (CBoundingBox *object); bool collidesWith (CVector3<float> &point); protected: // Darf die BoundingBox später mit irgendetwas kollidieren? bool m_Collidable; // Daten über die BoundingBox. CVector3<float> m_Position; CVector3<float> m_Min; CVector3<float> m_Max; }; #endif
// Datei: CCreature.h // ////////////////////////////////////////////////////////////////////////////////// // Autor: Patrick Ullmann © Xarent Interactive // Erstellt: 08.12.03 // Änderungen: 08.12.03 (Patrick) Datei erstellt // ////////////////////////////////////////////////////////////////////////////////// // Beschreibung: Struktur für Spielfiguren (Player, NPCs, Enemys usw.) #ifndef _CCREATURE_H_ #define _CCREATURE_H_ // I N C L U D E S ////////////////////////////////////////////////////////////////// #include "CBoundingBox.h" #include "..\\core\\CTextureManager.h" // D E F I N I T I O N E N ////////////////////////////////////////////////////////// // Noch keine // S T R U K T U R E N ////////////////////////////////////////////////////////////// class CCreature : public CBoundingBox { public: CCreature (void); ~CCreature (void) {}; void convertRealToRelative (void); void convertRelativeToReal (void); void load (const std::string &FileName); void update (int MsEllapsed); void render (int MsEllapsed); private: CREATURE_STATE m_state; }; #endif
// Datei: CWorld.h // ////////////////////////////////////////////////////////////////////////////////// // Autor: Patrick Ullmann © Xarent Interactive // Erstellt: 29.11.03 // Änderungen: 29.11.03 (Patrick) Datei erstellt // ////////////////////////////////////////////////////////////////////////////////// // Beschreibung: Das Level #ifndef _CWORLD_H_ #define _CWORLD_H_ // I N C L U D E S ////////////////////////////////////////////////////////////////// #include "..\\objects\\CWorldTile.h" #include "..\\core\\CKeyboardManager.h" #include "..\\objects\\CCreature.h" // D E F I N I T I O N E N ////////////////////////////////////////////////////////// // Noch keine // S T R U K T U R E N ////////////////////////////////////////////////////////////// class CWorld { public: // Constructor CWorld (void); // Destructor ~CWorld (void); // Mapdatei laden void loadMap (const std::string &FileName); // Welt updaten void update (int MsEllapsed); // Welt rendern void render (int MsEllapsed); private: // Unser Stringparser std::vector <std::string> parseString (const std::string &s, const char &sep); // Vector für die Tiles. std::vector <CWorldTile> m_vec_Tiles; // ########################################### // Wenn ich sowas schreibe oder eine Klasse hier hin // Stecke die von CBoundingBox abgeleitet wurde wie // z.B. CCreature bekomme ich den oben genannten Fehler :( CBoundingBox x; }; #endif
Ich hoffe das reicht, sorry wenn es recht viel ist, aber zwei Sachen habe ich bisher rausgefunden:
- Es hat irgendetwas mit dem Destruktor der CVector3 zu tun, aber ich kann mir nicht erklären: WAS!?!?!
- In der CWorld.h unter dem Kommentar, immer wenn ich eine Klasse einbinde die CVector3 benutzt oder davon abgeleitet ist, bekomme ich diesen Fehler!Wenn ihr sonst noch welche Daten (z.B. Füllen des Vectors mit CWorldTile (Ist auch von CBoundingBox abgeleitet veruhrsacht aber keine Fehler))braucht bitte bitte sagt es mir!
Aber bitte bitte helft mir diesen Fehler zu finden, ich verzweifle an diesem Mistkerl :(:(:(
Schon mal dickes Danke im Voraus! Ich hoffe inständigst, das ihr eine Ahnung habt wo der Fehler liegt und wie ich ihn beheben kann.
Gruß,
Patrick
-
Kannste mal die Stelle im Quellcode hervorheben bei der Dir der Debugger sagt das es kracht ?
Irgendwie finde ich den Source unübersichtlich.
(z.B. ist der Destruktor von Vector3 leer)Ich denke da musste noch mal die Information sortieren und neu posten.
Ich blick da zumindest nich durch :o(
-
Hi,
hm ich dachte er wäre übersichtlich, naja jedem das seine. Ich bin mal mit dem debugger drüber gegangen:aus einen mir unerklärlichen grund wird eine Exception geworfen die nicht von mir ist! Ich finde aber diese verdammte zeile nicht
Woran könnte das liegen? Ich benutze Singletons und co?
-
Wie sieht denn die Aufrufliste aus?
-
@MFK && All:
Falls ihr den code des GANZEN Programmes haben wollt und Compilieren (weil der Fehler irgendwo anders liegt ich das aber net so sehr glaube) dann saugt euch diesen code und stopft einfach wie oben abgebildet unter dem Vector eine CBoundingBox hin oder sonst was, was von CBoundingBox abgeleitet wurde.Hier der Code:
http://www.scherfgen-software.net/patrick/tut4.zipMacht von mir aus jegliche veränderungen damit dieser verdammte fehler verschwindet ich bin mit meinem Latein an ende *schnief*
-
Compilieren kann ich nich weil ich im mom keine SDL und GL hab.
Kannst Du aber mal die Funktion angeben in der die Exception auftritt ?
Wäre schon mal hilfreich
-
würde ich mega gerne, doch ich finde diese funktion net, ich wurde eben 30 min lang durch Assembler Dateien gejagt die mir nix gesagt haben und irgendwann schmierte dann auch noch mein .NET ab
Der will sich einfach irgendwie ent finden lassen
-
Nimm doch Schritt für Schritt ALLES unnötige aus deinem Programm raus.
Bis der Fehler nicht mehr auftritt. Dann wirst du wohl erkennen wo das Problem genau liegt.
-
Dumme Frage:
wo ist denn der Constructor by reference ? (obwohl ich nicht glaube, dass es an dessen Fehlen liegt. Schliesslich ist da nichts mit new, aber wenn operator = und normaler Constructor schon ausformuliert sind, gehört der dazu)
-
Patrick schrieb:
würde ich mega gerne, doch ich finde diese funktion net, ich wurde eben 30 min lang durch Assembler Dateien gejagt die mir nix gesagt haben
Darum sollst du ja auch die Aufrufliste rausrücken.
-
MFK schrieb:
Patrick schrieb:
würde ich mega gerne, doch ich finde diese funktion net, ich wurde eben 30 min lang durch Assembler Dateien gejagt die mir nix gesagt haben
Darum sollst du ja auch die Aufrufliste rausrücken.
Sorry wenn das jetzt etwas dümmlich klingt, aber was meinst du genau mit Aufrufliste? Meinst du ALLE Funktionen die ich aufrufe aufgelistet?
Oder meinst du etwas, was der debugger ausspuckt?
-
etwas, was der debugger ausspuckt!
-
Hi,
hab ich doch oben gepostet? oder was meint ihr? *bahnhof versteh*