Problem mit char*



  • Das folgende Problem kapier ich irgendwie nicht...

    kurzer Beispielcode:

    #include "stdafx.h"
    #include <cstring>
    
    class Test  
    {
    public:
    	Test();
    	virtual ~Test();
    	void SetString(char* Value);
    
    	char * myString;
    };
    
    Test::Test()
    {
    	myString=0;
    };
    
    Test::~Test()
    {
    	if (myString!=0) delete myString; // <== geht nicht
    };
    
    void Test::SetString(char* Value)
    {
    	if (myString!=0) delete myString; // <== geht nicht		
    	myString=new char[strlen(Value)];
    	strcpy(myString,Value);
    };
    
    int main()
    {
    	Test test;
    	test.SetString("Hallo");
    	test.SetString("dies ist ein Test");
    	test.SetString("Ende");
    	return 0;
    }
    

    Kompilert habe ich mit MSVC 6.0 in "Debug"-Konfiguration.

    Warum erzeugt das "delete" eine Fehlermeldung??? Ich habe den Speicher für "myString" doch mit "new" angefordert???
    Im Debugger ist zu sehen, daß "myString" immer ein neuer Speicherbereich zugewiesen wird. Der Inhalt von *myString ist auch korrekt. Warum kann ich den Speicher nicht wieder freigeben???



  • versuchs mal mit delete[]



  • ich Depp - danke !!



  • zu früh gefreut - die Fehlermeldung bleibt die gleiche!

    Nu versteh ich gar nix mehr...



  • der strcpy befehl schreibt über dein Array hinaus wegen der abschliessenden 0 bei c-strings. Erzeuge das Array mit myString = new char[strlen(str)+1] dann sollte es klappen. Speicher Freigabe bei Arrays immer mit delete [] myString freigeben!



  • jetzt gehts - nochmal danke 🙂


Log in to reply