Avatar ·

A memória de uma variável local pode estar acessível fora do seu escopo?

Olá a todos! Comecei a estudar C++ e me deparei com um comportamento estranho. Escrevi uma função que retorna um ponteiro para uma variável local: ```cpp int* getPointer() { int x = 42; return &x; } int main() { int* ptr = getPointer(); std::cout << *ptr << std::endl; // Exibe 42 // ... mais tarde ... std::cout << *ptr << std::endl; // Pode exibir lixo } ``` A primeira saída funciona — obtenho 42. Mas li que isso não deve ser feito, porque x é uma variável local e sua memória é liberada após sair da função. No entanto, o código compila e funciona! Por quê? E o que realmente acontece com a memória? O compilador pode de alguma forma preservar o valor ou é apenas sorte? Como retornar dados de uma função corretamente se preciso retornar um ponteiro? Desde já agradeço pela explicação! <<>>

Por que o código "funciona" e qual o perigo

Você se deparou com um exemplo clássico de ponteiro pendente (dangling pointer).