Debug Assertion Failed???
-
Ich habe in einem Programm einen merkwürdigen Fehler erhalten:
Der Compiler hat keinen Fehler gefunden, aber vor Ende des Programms kam ein Fehlerfenster:Debug Assertion Failed
Prtogramm: ...
File: dbgheap.c
Line: 1011Expression: _crtIsValidHeapPoimnter(pUserData)
ich nehme mal an, dass das irgendiwe mit meiner Smartptr Klasse zu tun hat, hier der Code:
template <class T> class DLL SmartDecoState { protected: T* ptr; public: inline SmartDecoState(){try{ptr = new T;}catch(...){ptr=0;}} explicit inline SmartDecoState(T* nptr){ptr=nptr;} inline SmartDecoState(const SmartDecoState<T>& param); virtual ~SmartDecoState(){delete ptr;} inline void newUnit(T* nptr); SmartDecoState<T>& operator=(const SmartDecoState<T>& param); T* operator->() const; T& operator *() const; };
Ich denke mal das solle reichen, aber woher kommt der Fehler und wie kann ich ihn beheben?
thx
Glamdring
-
Ich hab die Lösung gefunden: Etwas sollte mit delete gelöscht werden, dass nicht mit new erzeugt wurde
mfg
Glamdring
-
Sehe ich das richtig, dass dein Objekt gelöscht wird, selbst wenn es von anderen Pointern noch referenziert wird?
-
Nene, eher so:
void dosomethind(Unit* ptr) { //... delete ptr; } Unit Franz; dosomething(&Franz);
mfg
Glamdring
-
Ich meinte so:
SmartDecoState<int> a; { SmartDecoState<int> b; b = a; } // b wurde hier zerstört, der Destruktor löscht das int, auf das a und b zeigen. int x = *a; // aua
Oder kopierst du das Objekt im operator=? Das wäre aber nicht etwas, was ich bei einem Pointer erwarten würde.