查看下面的代码。
#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";
}
如何解释这些情况?
答案 0 :(得分:1)
每次调用leave()
都会向堆栈添加一些信息。当您以递归方式调用它时,堆栈会一直增长,直到空间不足,然后操作系统终止应用程序。在第二个例子中,可能是编译器优化了什么也没做的功能。