const problem



  • Hallo,

    ich habe ein Problem mit const-Konstrukten der Art "<typ> const <var>", wenn ich als typ einen char* benutze.

    Folgendes frisst der Compliler und läuft auch...

    int* const ptrI = new int(1);
    ptrI = 2;
    

    Warum geht das hier nicht (= core dump)???

    char* const c = "string";
    c[2] = 'x'
    

    Danke und Grüsse, Chris



  • Das hat garnichts mit dem const an dieser Stelle zu tun, da es ohne genauso krachen kann. Denn der Compiler darf freistehende Literale (wie Dein "string") in Nur-Lese-Bereichen Deines Programms lagern. Das gemeine ist, dass die Definition (aus Kompatiblität zu C) auch non-const sein darf.

    Folgendes erzeugt ein Array im Scope und schiebt den String dort hinein. Der String ist hier const, die Adresse des Array ist sowieso konstant.

    char const c[] = "string";
    


  • Hi,

    das hat mit "const" eigentlich nicht direkt ws zu tun, sondern damit, dass Du einen Stringliteral verändern willst .... und das ist nicht erlaubt.

    örks schrieb:

    ...

    char* const c = "string"; // c verweist auf ein String-Literal mit dem Inhalt "string"
    c[2] = 'x'; // Hier willst Du dahin schreiben, worauf c zeigt.
    

    Stell Dir einfach vor, dass der Compiler die Zeichenkette "string" sogar in "reinen Lesenspeicher" ablegen darf....
    Kleiner Tipp1:

    std::string s = "string";
    

    macht evtl. eher das, was Du erwartest.

    Kleiner Tipp2:
    Mit char* const sagst Du , dass Du die Adresse, auf die c zeigt, nicht verändern willst ... vermutlich meinst Du char const * ...

    (Damit sagst Du, dass Du den Inhalt, der an der Adresse steht, nicht verändern willst).

    Gruß,

    Simon2.


Anmelden zum Antworten