假设下面的代码,
int* foo(){
int a=5;
return &a;
}
int main(){
int* b=foo();
std::cout<<*b<<std::endl;
return 0;
}
我对这个程序的理解是a的生命时间只在foo中。 foo()完成后,a应该无效。但由于没有任何功能会覆盖那一堆堆栈,它仍然会打印5.如果这是错误的,请纠正我。
如果以上是正确的,我的问题是,我将std :: cout&lt;&lt ;,称为输出流;我实际上叫了一些东西,它会占用一些空间吗?或者它在内存中的运作方式。非常感谢!!
答案 0 :(得分:2)
“但是因为没有函数会覆盖那堆栈”。您肯定不知道:C ++标准中没有任何内容表明这一点。我可以构建一个符合标准的编译器来覆盖堆栈的那个块。也许我的std::cout
实现会这样做。
正式程序的行为未定义。你不能再说了。