本文へスキップ

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

すたっくおーばーふろー

スタックオーバーフローとは、プログラム実行中にコールスタックの容量を超えてしまい、プログラムが異常終了するエラーのことです。

スタックオーバーフローとは、プログラム関数を呼び出す際に使用する「コールスタック」と呼ばれるメモリ領域が上限を超えた状態発生するエラーです。

コールスタックは、プログラムが関数を呼び出すたびにその呼び出し情報(引数・戻り先アドレスなど)を積み上げていく仕組みです。関数が終了するとその情報はスタックから取り除かれますが、処理が終わらないまま関数の呼び出しが際限なく続くと、スタックはやがて上限に達します。

主な発生原因には次のようなものがあります。

  • 終了条件のない再帰関数(無限再帰)
  • 相互に呼び出し合う関数の連鎖が深くなりすぎる場合
  • 再帰のネストが非常に深いアルゴリズムで許容量を超えた場合

JavaやC#では StackOverflowError、Pythonでは RecursionError などとして例外が発生し、多くの場合はプロセスが強制終了します。対策としては、再帰を繰り返し処理(ループ)に書き換える・末尾再帰最適化を活用する・スタックサイズを設定で拡張するといった方法が有効です。プログラミングの学習サイト「Stack Overflow」はこのエラーにちなんで命名されています。

使い方・例文

「再帰関数に終了条件を書き忘れたためスタックオーバーフローが発生し、プログラムがクラッシュした」のように使います。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語