Pointer auf undefinierten Bereich...



  • D-U-D-E schrieb:

    Willst du mir sagen, daß

    char *t = 0;
    
        if (!t)
            t = "test";
    

    standardkonform ist? Jetzt bin ich allerdings wirklich verwirrt.

    Wo siehst du denn da ein Problem?

    t wird mit Null initialisert, und verweist am Ende auf das Stringliteral "test".



  • Also wird das Literal "test" in den Speicher gelegt und t darauf umgebogen, richtig?



  • Das hat zwar nichts mit biegen zu tun, aber ja: t wird mit NULL initialisert, und verweist am Ende auf das Stringliteral "test" . 😉

    cheers, Swordfish



  • Okay, soweit so gut 🙂 Aber wieso klappt das zum Beispiel nicht mit einem Integer?



  • D-U-D-E schrieb:

    Okay, soweit so gut 🙂 Aber wieso klappt das zum Beispiel nicht mit einem Integer?

    Was genau?

    int a = 0;
    a = 12;
    

    Klappt doch 🙂

    Nochmal zum Hintergrund: "test" ist ein Zeichenkettenliteral in ReadOnly-Speicher des Programms. Du weist hier dem Zeiger zunächst den Wert 0 und dann den Wert "Adresse des Literals" zu. Bei dem Integer-Beispiel weist Du dem Integer zunächst den Wert 0 und dann den Wert 12 zu.

    int *a = 0;
    *a = 12
    

    Das ist eine völlig andere Situation. Du weist hier dem Zeiger zunächst den Wert 0 zu und dann dem, worauf er zeigt den Wert 12. Das ist undefiniert. Es wäre aber auch undefiniert wenn der Zeiger nicht den Wert 0 hätte.



  • Okay, Frage erledigt 😉 Danke!


Anmelden zum Antworten