局部变量的内存在其作用域之外是否仍然可访问?
大家好!我刚开始学习C++,遇到了一些令人困惑的行为。我写了一个返回局部变量指针的函数:
```cpp
int* getPointer() {
int x = 42;
return &x;
}
int main() {
int* ptr = getPointer();
std::cout << *ptr << std::endl; // 输出42
// ... 稍后 ...
std::cout << *ptr << std::endl; // 可能输出垃圾值
}
```
第一次输出有效——我得到了42。但我读到过,这样做是不允许的,因为x是一个局部变量,其内存在函数退出后会被释放。然而代码编译并运行了!为什么?实际上内存发生了什么?编译器是否以某种方式保留了值,还是这只是运气?如果我想返回一个指针,如何正确地从函数返回数据?
提前感谢您的解释!
<<>>
为什么代码“能工作”以及危险在哪
您遇到了一个经典的悬空指针(dangling pointer)示例。