問題 No.2694
プログラム内で再帰呼び出しを多用したアルゴリズムを実装した際、関数が呼び出されるたびにスタックフレームが次々と積み上げられていき、利用可能なメモリの限界を超えたときに発生するエラーを指す用語はどれか。
【正解の解説】
スタックオーバーフロー
これはレストランのお皿洗いで、次々にお皿が追加されて流し台のタワーが限界を超えて崩壊するような状態です。再帰の終わり(終了条件)を忘れて関数を呼び出し続けると、仕事のメモであるスタックフレームが机の上に積み上がり続け、ついにはスペースがなくなってパニックを起こします。
スポンサーリンク
【その他の選択肢の解説】
ヒープオーバーフロー
スタック領域ではなく、画像データや大きなオブジェクトなどを自由に置いておく倉庫であるヒープ領域が満杯になる現象です。関数呼び出しの履歴が積み上がるスタックオーバーフローとは、メモリの使われ方が根本的に異なるため混同に注意が必要です。
メモリーリークエラー
使い終わった食器を片付けずにどんどん放置していくことで、使えるスペースがだんだん狭くなっていく状態に似ています。今回は一瞬でメモリの限界を超える「スタックの積み上げ」が原因であるため、徐々にメモリが侵食されるメモリリークとはメカニズムが異なります。
無限ループ例外
同じ処理が無限に繰り返される点では似ていますが、関数を呼び出すたびにメモリを消費してエラーに至るのがスタックオーバーフローです。無限ループはCPUを100%使い続けるだけで、必ずしもメモリ枯渇エラーを直撃するとは限らない点が異なります。