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 秒間機能し、自動的に閉じます。行は印刷されませんhellow。その理由は何ですか?Windows タスク マネージャーでは、アプリケーションで使用されるメモリが増加することがわかります。ただしx、メイン関数内のみにメモリを割り当てているため、関数はメモリをx何度も割り当てます。このような状況はメモリ リークと呼ばれますか? その場合、それを防ぐためにどの行を追加する必要がありますか?

hellow以下のようにコードを変更すると、関数を何度も実行せずに単語が表示されます。

 void leave(){
     leave();
  }

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

これらの状況をどのように説明しますか?

4

1 に答える 1

1

を呼び出すたびleave()に、小さな情報がスタックに追加されます。再帰的に呼び出すと、スペースがなくなるまでスタックが大きくなり、オペレーティング システムはアプリケーションを終了します。2 番目の例では、コンパイラが何もしない関数を最適化したと考えられます。

于 2012-12-05T17:12:21.583 に答える