Referenzen auf Pointer



  • Hallo,
    ich hab ein ziemlich seltsames Problem. Ich habe eine Klasse, die einen Referenz auf einen Pointer auf ein SDL_Surface als Menber hat. Also so:

    SDL_Surface*& set
    

    Im Konstruktor weise ich diesem Member auch einen Wert zu:

    block::block(SDL_Surface* s) :set(s)
    { //geht unten weiter
    

    Weil nach dem compilieren etwas nicht funktioniert hat, gebe ich die Adresse, auf die der Pointer zeigt aus:

    std::cout << (void*)set << endl;
    }
    

    Soweit so gut, allerdings habe ich noch eine andere Funktion eingefügt, die mir auch die Adresse, auf die set zeigt ausgibt:

    void block::sayset()
    {
      std::cout << (void*)set << endl;
    }
    

    Ich benutze diese Funktion DIREKT nachdem ich das Objekt erstellt, d.h. den Konstruktor aufgerufen habe.
    Er gibt mir eine andere Adresse aus, als im Konstruktor. Ich benutze nur 2 Variablen vom Typ SDL_Surface*, aber die Adresse, die ausgegeben wird, ist eine völlig andere als die beiden anderen. Darauf zuzugreifen scheint allerdings kein Problem darzustellen, alle Werte sind mit 0 gefüllt.
    Kann sein, dass ich einfach auf dem Schlauch stehe, aber es ist mir unerklärlich...
    geloescht 😕

    PS: SDL_Surface ist ein struct, das zur SDL gehört (GrafikAPI). Allerdings scheint sich das Problem allgemein auf C++ zu beziehen, da ich ja eigentlich nur mit Pointern arbeite und wie gesagt keine Funktion zwischen Konstruktor und sayset() aufrufe (und natürlich auch sonst das Obj nicht verändere)



  • Du solltest den Parameter im ctor auch per Referenz übergeben. Zeiger werden ja nur by-value übergeben, dh sobald dein ctor beendet ist, referenziert set etwas, was schon längst tot ist.



  • aaah, ok, danke. daran hab ich überhaupt nicht gedacht. das ganze ist zwar tot, scheint aber trotzdem irgendwie ein (für das programm und die SDL-Funktionen, die ich noch später aufrufe) gültiger wert zu sein.
    geloescht

    PS: ich hab mir schon gedacht, dass es irgendetwas so banales ist *aufnkopfhau* danke!


Anmelden zum Antworten