0

可能重复:
什么是堆栈溢出错误?

看下面的代码。

#include <iostream>
using namespace std;

void leave(double as){
    cout<<as;
    leave(as);
}


int main(){
    double x=1234.5;
    leave(x);
    cout<<"hellow";
}

当这段代码执行时,他们是无法停止的。x它应该一遍又一遍地打印该值。但实际上,这工作大约 20 秒并自动关闭。它不打印 line hellow。原因是什么?在 Windows 任务管理器中,我可以意识到应用程序使用的内存会增加。但是我x只在主函数中分配了内存,所以函数会x一遍又一遍地分配内存。这种情况是否称为内存泄漏?如果是这样,应该添加哪些行来防止它?

如果我如下更改代码,它会显示单词hellow,而无需一遍又一遍地执行该函数:

 void leave(){
     leave();
  }

  int main(){
      leave();
      cout<<"hellow";
  }

如何解释这些情况?

4

1 回答 1

1

每次调用都会向leave()堆栈添加一些信息。当您递归调用它时,堆栈会增长,直到空间用完,并且操作系统会终止应用程序。在第二个例子中,大概编译器优化了什么都不做的函数。

于 2012-12-05T17:12:21.583 回答