ValidHeapPointer, templates
-
Hi,
Ich habe ein Problem mit dem heap. Genauer gesagt damit, Speicher frei zu geben:
Ich Arbeite im folgenden mit einer Template Klasse 'TemplateTest' und
einer einfachen Klasse 'CDummy'.Ich benutze VC++ 6 und kompiliere im DEBUG-Modus.
In der Funktion main() erstelle ich dynamisch ein Feld von Instanzen der Klasse TemplateTest<CDummy*>
und versuche anschließend den Speicher wieder frei zu geben.
Hier liegt das Problem!! (Zeile: delete pList)debug assertion failed
Expression _CrtIsValidHeapPointer(pUserData)Wieso landet das Feld nicht im heap? Oder tut es das? Was ist dann Kaputt???
Erstelle ich nur eine Instanz (mit new) gibt es keine Probleme. (TemplateTest<CDummy*>* pList = new TemplateTest<CDummy*>; delete pList;)
Ebenfalls keine Probleme gibt es, wenn ich den Destruktor in der Klasse TemplateTest auskommentiere.
Wo liegt das Problem??
Vielen Dank für eure Hilfe!template <class T> class TemplateTest { public: TemplateTest() {}; ~TemplateTest() {}; }; class CDummy { public: void do_nothing() {} }; int main() { TemplateTest<CDummy*>* pList = new TemplateTest<CDummy*>[5]; delete pList; }
-
... delete [] pList; return 0; };
-
Vielen Dank Cpt.Tanga!
-
[quote="Cpt.Tanga"]
... delete [] pList; return 0; };[/quote]
Ist die Null nach dem return zwingend?Hat der Debuggermodus Einfluß auf die Destructoren von Heap oder ähnlichen Speicherreferenzen?Wo liegen die grundsätzlichen Unterschiede zw. C++ und WIN32API im Hinblick auf die Kernel Objects? (Gültigkeit usw.)
Für ein paar weiterreichende Anmerkungen wäre ich sehr dankbar!
MfG
Love