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


Anmelden zum Antworten