iostream占用堆栈空间吗?

时间:2015-04-16 07:43:45

标签: c++ memory stream stack iostream

假设下面的代码,

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 ;,称为输出流;我实际上叫了一些东西,它会占用一些空间吗?或者它在内存中的运作方式。非常感谢!!

1 个答案:

答案 0 :(得分:2)

“但是因为没有函数会覆盖那堆栈”。您肯定不知道:C ++标准中没有任何内容表明这一点。我可以构建一个符合标准的编译器来覆盖堆栈的那个块。也许我的std::cout实现会这样做。

正式程序的行为未定义。你不能再说了。