ホーム用語辞典 > スタックオーバーフロー

スタックオーバーフローとは?

スタックオーバーフロー(stack overflow)とは、コールスタックが上限を超えてあふれ、プログラムが異常終了する現象です。「スタックがあふれる(overflow)」という名前のとおりです。

コールスタックは、関数を呼び出すたびに戻り先や引数などの情報を積んでいく領域です(後入れ先出しのスタック)。関数が終われば1つ降りますが、この積み上げには上限があります。上限を超えると、もう積めずにあふれてしまいます。

スタックオーバーフロー:積みすぎて上限を超える 上限 呼び出し 呼び出し 呼び出し 呼び出し 💥 あふれる 積み続ける 終わらない再帰などで積み続けると、上限を超えて異常終了する
図:呼び出しを積みすぎてスタックの上限を超えると「あふれ」て異常終了する

いちばん多い原因は終わらない再帰です。再帰で「終わりの合図(ベースケース)」を書き忘れると、自分を無限に呼び続けて積み上がり続け、やがてスタックオーバーフローで止まります。極端に深い再帰や、巨大なローカル変数の積み過ぎでも起こります。

対策は、再帰に必ずベースケースを用意すること、深くなりすぎる処理はループに書き換えること。なお、有名なQ&Aサイトの名前も、この用語が由来です。

🔗 関連:ハノイの塔の可視化(再帰の深さを体感)/ スタックとキューの可視化用語辞典トップ