Avatar ·

局部变量的内存在其作用域之外是否仍然可访问?

大家好!我刚开始学习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)示例。