关于内存使用的理论和问题

时间:2012-12-05 16:58:22

标签: c++ memory

  

可能重复:
  What is a stack overflow error?

查看下面的代码。

#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秒并自动关闭。它不会打印行hellow。它是什么原因?在Windows任务管理器中,我可以意识到应用程序使用的内存会增加。但是我只在主函数中为x分配了内存,因此函数会一遍又一遍地为x分配内存。这种情况是否称为内存泄漏?如果它那么应该添加哪些行以防止它?

如果我更改下面的代码,则会显示单词hellow而不会反复执行该功能:

 void leave(){
     leave();
  }

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

如何解释这些情况?

1 个答案:

答案 0 :(得分:1)

每次调用leave()都会向堆栈添加一些信息。当您以递归方式调用它时,堆栈会一直增长,直到空间不足,然后操作系统终止应用程序。在第二个例子中,可能是编译器优化了什么也没做的功能。