我无法理解为什么这个程序打印8762作为结果

时间:2011-10-06 18:27:10

标签: c++ pointers heap

  

可能重复:
  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而不是垃圾呢?

感谢

3 个答案:

答案 0 :(得分:5)

因为你处于未定义的行为领域。任何事情都可能发生。

故事的道德:永远不要归还临时的地址!

答案 1 :(得分:1)

不,它不一定会马上被释放。数据仍将存在于内存中,直到其他内容写入其中。由于您的程序在调用函数后没有做太多工作,因此没有机会将值覆盖,因此它仍然是“正确的”。

答案 2 :(得分:1)

  

那么为什么我得到8762而不是垃圾呢?

8762 垃圾。