可能重复:
Can a local variable's memory be accessed outside its scope?
#include <iostream>
double *foo(){
double *varFoo = new double;
double temp = 8762;
varFoo = &temp;
return varFoo;
}
int main(void){
double *newVar = foo();
std::cout<<*newVar<<std::endl;
std::cin.get();
return 0;
}
我理解指针varFoo将在堆中创建,因此将一直保持在那里直到我调用delete,但是在函数foo中的temp变量呢?
它是一个局部变量,一旦foo函数的调用结束,临时变量的值将被存储的地址将被释放吗?
那么为什么我得到8762而不是垃圾呢?
感谢
答案 0 :(得分:5)
因为你处于未定义的行为领域。任何事情都可能发生。
故事的道德:永远不要归还临时的地址!
答案 1 :(得分:1)
不,它不一定会马上被释放。数据仍将存在于内存中,直到其他内容写入其中。由于您的程序在调用函数后没有做太多工作,因此没有机会将值覆盖,因此它仍然是“正确的”。
答案 2 :(得分:1)
那么为什么我得到8762而不是垃圾呢?
8762 是垃圾。