0

ここでメモリリークを作成している可能性があると思います:

   void commandoptions(){
      cout<< "You have the following options: \n 1). Buy Something.\n  2).Check you balance. \n3). See what you have bought.\n4.) Leave the store.\n\n Enter a number to make your choice:";
      int input;
      cin>>input;
      if (input==1) buy();
      //Continue the list of options.....
      else
      commandoptions(); //MEMORY LEAK IF YOU DELETE THE ELSE STATEMENTS!
   }

inline void buy(){
    //buy something
    commandoptions();
}

プログラムが実行されて初めて commandoptions が実行されたとしましょう。ユーザーは「1」を選択します。これは、buy() サブルーチンが commandoptions() サブルーチンによって実行されることを意味します。

buy() の実行後、再度 commandoptions() を呼び出します。

最初の commandoptions()返されることはありますか? それとも、メモリリークを起こしただけですか?

自分自身を呼び出すだけのサブルーチンを作成すると、そのサブルーチンの他の「サイクル」が終了しないため、スタックオーバーフローが発生します。私はここでそれをやっている/やろうとしていますか?

inline購入時にキーワードを使用したことに注意してください...違いはありますか?

喜んで教授に尋ねたいのですが、彼は都合がつかないようです。:/

編集:ループを使用することは私には思い浮かばなかったとは信じられませんが、おかげで、用語について何か新しいことを学びました!

4

5 に答える 5

5

これは基本的に、基本ケースのない再帰です。したがって、再帰は決して終了しません (つまり、スタック スペースがなくなるまで)。

あなたがやろうとしていることについては、再帰ではなくループを使用する方がよいでしょう。

そして、あなたの特定の質問に答えるには:

  • いいえ、commandoptions決して戻りません。
  • メモリ リークの非常に広い定義を使用する場合、スタック フレームを再度削除せずに作成しているため、これはメモリ リークです。ただし、ほとんどの人はそれをそのようにラベル付けすることはありません(私を含む).
  • はい、最終的にはスタック オーバーフローが発生します。
  • キーワードはこれinlineに違いはありません。
于 2013-05-07T15:53:23.323 に答える