我不明白为什么这个程序打印8762

I can't understand why this program prints 8762 as a result

本文关键字:程序 打印 8762 明白 为什么      更新时间:2023-10-16

可能重复:
可以使用局部变量';内存是否在其范围之外被访问?

#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中的临时变量呢?

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

那么,为什么我得到的结果是8762而不是垃圾呢?

感谢

因为您处于"未定义行为"区域。任何事情都有可能发生。

故事寓意:永远不要回一个临时的地址!

不,它不一定会立即释放。数据仍然会在内存中,直到其他东西重写它。由于程序在调用函数后不会做太多工作,因此没有机会重写该值,因此它仍然是"正确的"。

那么,为什么我得到的结果是8762而不是垃圾呢?

8762是垃圾。