スタックオーバーフローとは?
スタックオーバーフロー(stack overflow)とは、コールスタックが上限を超えてあふれ、プログラムが異常終了する現象です。「スタックがあふれる(overflow)」という名前のとおりです。
コールスタックは、関数を呼び出すたびに戻り先や引数などの情報を積んでいく領域です(後入れ先出しのスタック)。関数が終われば1つ降りますが、この積み上げには上限があります。上限を超えると、もう積めずにあふれてしまいます。
いちばん多い原因は終わらない再帰です。再帰で「終わりの合図(ベースケース)」を書き忘れると、自分を無限に呼び続けて積み上がり続け、やがてスタックオーバーフローで止まります。極端に深い再帰や、巨大なローカル変数の積み過ぎでも起こります。
対策は、再帰に必ずベースケースを用意すること、深くなりすぎる処理はループに書き換えること。なお、有名なQ&Aサイトの名前も、この用語が由来です。
🔗 関連:ハノイの塔の可視化(再帰の深さを体感)/ スタックとキューの可視化 / 用語辞典トップ