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

jon*_*han 1 c++ heap pointers

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

我知道指针varFoo将在堆中创建,因此将保持在那里直到我调用delete,但是在函数foo中的temp变量呢?

它是一个局部变量,一旦foo函数的调用结束,临时变量的值将被存储的地址将被释放吗?

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

谢谢

Joh*_*ing 5

因为你处于Undefined Behavior土地.什么事情都可能发生.

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