¿Puede estar accesible la memoria de una variable local fuera de su ámbito?
¡Hola a todos! Acabo de empezar a aprender C++ y me encontré con un comportamiento extraño. Escribí una función que devuelve un puntero a una variable local:
```cpp
int* getPointer() {
int x = 42;
return &x;
}
int main() {
int* ptr = getPointer();
std::cout << *ptr << std::endl; // Imprime 42
// ... más tarde ...
std::cout << *ptr << std::endl; // Puede imprimir basura
}
```
La primera impresión funciona — obtengo 42. Pero he leído que no se debe hacer, porque x es una variable local y su memoria se libera al salir de la función. Sin embargo, el código compila y funciona. ¿Por qué? ¿Y qué sucede realmente con la memoria? ¿Puede el compilador de alguna manera conservar el valor o es solo suerte? ¿Cómo devolver datos correctamente desde una función si necesito devolver un puntero?
¡Gracias de antemano por la explicación!
<<>>
Por qué el código "funciona" y cuál es el peligro
Te encontraste con un ejemplo clásico de dangling pointer.