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...
geloeschtPS: 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.
geloeschtPS: ich hab mir schon gedacht, dass es irgendetwas so banales ist *aufnkopfhau* danke!