Avatar ·

A memória de uma variável local pode ser acessada fora do seu escopo?

Olá, colegas! Recentemente comecei a estudar C++ e me deparei com um comportamento estranho. Escrevi uma função simples que retorna um ponteiro para uma variável local: ```cpp int* getPointer() { int localVar = 42; return &localVar; } int main() { int* ptr = getPointer(); std::cout << *ptr << std::endl; // Exibe 42... às vezes // Depois tento usar novamente std::cout << *ptr << std::endl; // Exibe lixo ou crash } ``` Eu pensei que, após sair da função `getPointer()`, a variável `localVar` é destruída e o ponteiro se torna um dangling pointer. Mas na prática, a primeira saída frequentemente mostra o valor correto 42. Por que isso acontece? Isso é undefined behavior ou há alguma explicação? Fico confuso porque às vezes o programa funciona "normalmente" e às vezes crasha. Li que a memória da stack não é limpa imediatamente, mas isso não significa que podemos usá-la, certo? Ou estou confundindo algo? Expliquem como entender corretamente o tempo de vida da variável local.