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).
No answers yet.
Faça login para deixar uma resposta