char pointer loeschen - blöde Frage



  • Kann mir jemand sagen warum ich beim Loeschen des Pointer auf diesen Code ne Assertion bekomme?

    char* pchTest = new char[128];
    	pchTest = "Hallo";
    	delete[] pchTest ;
    	pchTest = 0;
    

    Ich weiss dass mir der pchPointer durch die Zuweisung von "Hallo" verändert/verbogen wird, ich kann mir aber nicht erklären warum das so ist.
    Eigentlich möchte ich ja nur dass das die erste stelle des Wortes "hallo" auf die Adresse von pchTest gelegt wird.
    Weiss jemand Rat bzw. kann mir das einer erklären?



  • 1. Das ist C++.
    2. Es gibt cpp-Tags. Die machen den Code schön bunt und leserlicher.
    3. Ist

    pchTest = "Hallo";
    

    Quatsch. Damit versuchst du dem Pointer den Wert zuzuweisen, der "Hallo" entspricht. So geht das nicht. Entweder du benutzt die Stringklasse aus C++, oder du nutzt Funktionen wie z.B. strncat() oder strncpy().



  • Ich weiss dass mir der pchPointer durch die Zuweisung von "Hallo"
    verändert/verbogen wird, ich kann mir aber nicht erklären warum das so ist.

    Das ist genau das, was die Zuweisung bewirken soll, nämlich die Änderung
    der Adresse, welche pchTest enthält. Mit anderen Worten, der Pointer verweist
    nach der Zuweisung nicht mehr auf den neu-allozierten Speicher, sondern auf
    die konstante Zeichenkette "Hallo" (deren Speicher nicht beschreibbar und
    noch weniger löschbar ist). Die Adresse des 128-byte Blocks aus Zeile 1 ist verloren.

    Eigentlich möchte ich ja nur dass das die erste stelle des Wortes "hallo" auf die Adresse von pchTest gelegt wird.
    Weiss jemand Rat bzw. kann mir das einer erklären?

    Das ist in deinem Beispiel bereits der Fall. 'pchTest' verweist auf die erste
    Stelle von "Hallo". Aber ich vermute, du möchtest die Zeichenkette in deinen
    neuen Speicherblock kopieren:

    char *pchTest = new char[128];
    strcpy(pchTest, "Hallo");
    delete[] pchTest;
    

    Damit liegt der String "Hallo" im allozierten Speicher, und kann nun auch
    geändert werden.



  • Ahhh..., verstanden.
    Danke für die schnellen und ausführlichen Antworten


Anmelden zum Antworten