Avatar ·

Kann der Speicher einer lokalen Variable außerhalb ihres Gültigkeitsbereichs zugänglich sein?

Hallo zusammen! Ich habe gerade angefangen, C++ zu lernen, und bin auf ein unklares Verhalten gestoßen. Ich habe eine Funktion geschrieben, die einen Zeiger auf eine lokale Variable zurückgibt: ```cpp int* getPointer() { int x = 42; return &x; } int main() { int* ptr = getPointer(); std::cout << *ptr << std::endl; // Gibt 42 aus // ... später ... std::cout << *ptr << std::endl; // Kann Müll ausgeben } ``` Die erste Ausgabe funktioniert – ich bekomme 42. Aber ich habe gelesen, dass man das nicht tun soll, weil x eine lokale Variable ist und ihr Speicher nach dem Verlassen der Funktion freigegeben wird. Trotzdem kompiliert und funktioniert der Code! Warum? Und was passiert eigentlich mit dem Speicher? Kann der Compiler den Wert irgendwie erhalten, oder ist das nur Glück? Wie gibt man Daten korrekt aus einer Funktion zurück, wenn man einen Zeiger zurückgeben muss? Vielen Dank im Voraus für die Erklärung! <<>>

Warum der Code "funktioniert" und wo die Gefahr liegt

Sie sind auf ein klassisches Beispiel eines dangling pointer gestoßen.