记忆管理问题

dat*_*ili 1 c++ memory-management

可能重复:
可以在其范围之外访问局部变量的内存吗?

我有以下与内存管理相关的问题,源码从我在这里读到的文章说, 当一个变量超出范围时,该内存不再保证存储变量的值 示例代码给出

int main() {
  int *p;
  if (true) {
    int x = 5;
    p = &x;
  }
cout << *p << endl; // ???
}
Run Code Online (Sandbox Code Playgroud)

它也说, 在这里,p已成为一个悬空指针(指向内存未定义的内存) 但是这段代码显示结果5.那么编写这样的代码是错误的吗?请解释我

Oli*_*rth 7

关键词"不再保证 ".行为未定义.它可能会起作用,也可能不起作用,具体取决于编译器决定做什么.

你不能依赖这种行为.所以你永远不应该写那样的代码.

  • 谷歌为鼻子恶魔. (2认同)