可能重复:
Can a local variable's memory be accessed outside its scope?
我有以下有关内存管理的问题,从我阅读的源代码中可以看出,当变量超出作用域时,不再保证存储变量的值示例代码。
int main() {
int *p;
if (true) {
int x = 5;
p = &x;
}
cout << *p << endl; // ???
}它还说,在这里,p已经成为一个悬空的指针(指向内容未定义的内存),但是这段代码显示了结果5,那么编写这种代码是错误的吗?请解释我
发布于 2011-09-21 10:25:54
关键短语“不再是保证”。这种行为是未定义的。它可能工作,也可能不起作用,这取决于编译器决定做什么。
你不能依赖这种行为。所以你不应该写那样的代码。
发布于 2011-09-21 10:37:21
删除对象时,将释放用于存储该对象的内存范围。这只意味着其他进程现在可以自由地使用这个内存范围。存储在那里的值将保持不变,直到被另一个进程写入。
这与你“删除”窗口中的东西非常相似。实际上,您所做的是告诉系统,您允许它将这个空间用于其他事情。如果您试图立即恢复该文件,那么很有可能您的硬盘驱动器上还没有其他任何东西写入。如果您等待了几天,那么很有可能已经在上面写入了另一个文件。
因此,悬挂指针不能保证返回最初存储在那里的值。
发布于 2011-09-21 10:28:33
我想是因为..。P的address having by p在本地作用域中仍然具有address x的值,但是编译器现在可以自由地分配这个空间了。所以这种行为是完全没有定义的。
https://stackoverflow.com/questions/7498211
复制相似问题