Avatar ·

局部变量的内存能否在其作用域之外被访问?

大家好!我最近开始学习C++,遇到了一些令人困惑的行为。我写了一个简单的函数,它返回一个指向局部变量的指针: ```cpp int* getPointer() { int localVar = 42; return &localVar; } int main() { int* ptr = getPointer(); std::cout << *ptr << std::endl; // 有时输出42 // 然后再次尝试使用 std::cout << *ptr << std::endl; // 输出垃圾值或崩溃 } ``` 我以为在退出`getPointer()`函数后,变量`localVar`会被销毁,指针变成悬空指针(dangling pointer)。但实际上第一次输出通常显示正确的值42。为什么会这样?这是未定义行为(undefined behavior)还是有其他解释? 让我困惑的是,有时程序运行“正常”,有时却崩溃。我读到过栈内存不会立即被清除,但这并不意味着可以继续使用它,对吗?还是我理解有误?请指教如何正确理解变量的生命周期。