我不明白为什么这个程序打印8762
I can't understand why this program prints 8762 as a result
可能重复:
可以使用局部变量';内存是否在其范围之外被访问?
#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是垃圾。
相关文章:
- 程序打印 % 后预期输出
- C++ 链表程序打印最后一个数据项 n 次
- 合并数组的程序打印 0 而不是实际合并的数组
- 我的程序打印出与预期不同的结果
- 当矢量有 6 个元素(C++、矢量、循环)时,程序打印异常数字
- 为什么这个程序打印58684322800B5FD80
- 为什么不 垃圾值 正在由该程序打印
- 为什么这个程序打印"nine"两次?
- 为什么程序打印在调试和发布中浮动不同
- 如何使用Java发送HTTP GET,并使用用C++编写的CGI应用程序打印QUERY_STRING环境变量
- 为什么以下程序C++打印字符串的 ascii 值而不是字符?
- C++程序打印随机值
- C++程序打印字符串的最长单词
- 为什么我的程序打印默认构造函数
- 我希望程序打印数字 0 到 99,但是当我运行代码时,我看到 100 行 99
- 为什么我的程序打印垃圾
- 如何防止我的程序打印额外的斜杠
- 正在从信号处理程序打印堆栈跟踪
- 用程序打印时,我可以为每页指定不同的页面大小吗
- c++程序打印计数数