[Erledigt] Verständnisfrage: Adressen von Pointern



  • Hi,

    ich wollte gern die Adresse eines Pointers speichern bin jedoch dabei auf folgendes gestoßen:

    #include <stdlib.h>
    #include <stdio.h>
    
    void*
    f(size_t size)
    {
      void* p;
      p = malloc(size);
      printf("adress of p in f: %p\n", &p);
      return p;
    }
    
    int
    main(int argc, char* argv[]) {
      int* p;
      p = f(sizeof(int));
      printf("adress of p in main: %p\n", &p);
      free(p);
      return 0;
    }
    

    Ausgabe:

    address of p in f: 0022FF34
    address of p in main: 0022FF60
    

    Wird, trotz das es ein Pointer ist, der Pointer im Sepicher nochmal "verschoben"? Ich mein klar der Pointer bleibt so wie er ist aber dennoch befindet er sich in f() in einem anderen Sepicherbereich als in main. Gibt es dafür eine Erklärung?
    Ich benutze: GCC 4.3.3-dw2-tdm-1, MinGW auf Windows XP.

    Gut Schuß
    VuuRWerK 😉



  • VuuRWerK schrieb:

    Gibt es dafür eine Erklärung?

    -> Gültigkeit lokaler Variablen. (Pointer sind auch nur Variablen) 🙂



  • Hi VuuRWerK,

    Die jeweilige Adresse der Variablen p ist, ganz klar, nicht gleich - sind ja zwei verschiedene Variablen. Deren Wert aber, also worauf sie zeigt, ist derselbe.

    Wenn du

    printf("adress of p in f: %p\n", p); /* Adressoperator '&' weglassen */
    

    verwendest, wirst du sehen, dass die Adresse, auf die gezeigt wird, gleich ist.

    Es wird also nichts verschoben.

    Hoffe, man konnte dir behilflich sein.

    Gez. monstermunchkin



  • Ach verdammt, na klar ... [rotwerd-smiley]

    Habe gerade mal getestet und anstatt &p nur p ausgegeben und siehe da die Adresse ist die selbe. Hab vor lauter rumpointern ganz vergessen das p ja auch nur eine variable ist die den pointer auf den allokierten Block hält.

    Ok, Danke. Mir ist das mit der Gültigkeit von lokalen variablen nicht fremd aber an dieser Stelle hab ich das irgendwie total ignoriert ... Danke für den Hinweis 🤡
    Da kann ich ja jetzt ruhig schlafen gehen 🙂

    Gut Schuß
    VuuRWerK 😉

    Edit: @monstermunchkin: Genau, da bin ich nach dem Hinweis mit der lokalen Variable ebenfalls gerade drauf gekommen 🙂 Danke aber auch Dir!


Anmelden zum Antworten