假设下面的代码,
int* foo(){
int a=5;
return &a;
}
int main(){
int* b=foo();
std::cout<<*b<<std::endl;
return 0;
}
我对这个程序的理解是,一个的寿命只在foo中。foo() 完成后,a 应该无效。但由于没有函数覆盖该堆栈块,它仍然打印 5。如果这是错误的,请纠正我。
如果以上是正确的,我的问题是,我调用了 std::cout<<,输出流;我居然叫了什么,它会在堆栈上占用一些空间吗?或者它在内存中究竟是如何工作的。谢谢!!
"但是因为没有函数覆盖该堆栈块"。你不确定:C++标准中没有任何内容表明这一点。我可以构建一个符合标准的编译器来覆盖堆栈的该块。也许我对std::cout
的实现会做到这一点。
从形式上讲,程序的行为是未定义的。你不能再说了。