Laufzeitfehler: Heap Corruption (end of heap buffer)



  • Hallo!

    void MyString::CreateNewString(const char* str)
    {
    	char* newstr = new char[GetStringLength(str)];
    	for (int i=0; i<=GetStringLength(str); i++)
    		*(newstr+i) = *(str+i);
    	delete [] TheString;
    	TheString = newstr;
    }
    

    TheString ist eine Membervariable und GetStringLength eine Memberfunktion von MyString.
    Sobald ich die Methode ein zweites mal ausfuehre (beim ersten mal klappts) krieg ich den Laufzeitfehler. Wenn ich delete [] TheString jedoch ganz weglasse funktioniert alles einwandfrei - allerdings gebe ich den Speicher nicht mehr frei und das moechte ich natuerlich nicht.
    Was ist hier falsch?

    moah, ich bin frustriert, ich komm einfach nicht drauf. 🙄

    Gruss
    Cartman



  • Sollte es vielleicht i<GetStringLength(str) statt i<=GetStringLength(str) heißen?



  • feigling schrieb:

    Sollte es vielleicht i<GetStringLength(str) statt i<=GetStringLength(str) heißen?

    So funktioniert es zwar ohne Laufzeitfehler, aber es fehlt jetzt das Nullzeichen, was aergerlich bei Ausgabe mit std::cout ist... 😞

    //edit
    okay, habs rausgefunden... hab bei der Speicherbeschaffung das Nullzeichen nicht miteinberechnet... thx feigling 🙂


Anmelden zum Antworten