首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存管理问题

内存管理问题
EN

Stack Overflow用户
提问于 2011-09-21 10:24:07
回答 6查看 212关注 0票数 1

可能重复:

Can a local variable's memory be accessed outside its scope?

我有以下有关内存管理的问题,从我阅读的源代码中可以看出,当变量超出作用域时,不再保证存储变量的值示例代码。

代码语言:javascript
复制
int main() {
  int *p;
  if (true) {
    int x = 5;
    p = &x;
  }
cout << *p << endl; // ???
}

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-21 10:25:54

关键短语“不再是保证”。这种行为是未定义的。它可能工作,也可能不起作用,这取决于编译器决定做什么。

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

票数 7
EN

Stack Overflow用户

发布于 2011-09-21 10:37:21

删除对象时,将释放用于存储该对象的内存范围。这只意味着其他进程现在可以自由地使用这个内存范围。存储在那里的值将保持不变,直到被另一个进程写入。

这与你“删除”窗口中的东西非常相似。实际上,您所做的是告诉系统,您允许它将这个空间用于其他事情。如果您试图立即恢复该文件,那么很有可能您的硬盘驱动器上还没有其他任何东西写入。如果您等待了几天,那么很有可能已经在上面写入了另一个文件。

因此,悬挂指针不能保证返回最初存储在那里的值。

票数 4
EN

Stack Overflow用户

发布于 2011-09-21 10:28:33

我想是因为..。P的address having by p在本地作用域中仍然具有address x的值,但是编译器现在可以自由地分配这个空间了。所以这种行为是完全没有定义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7498211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档