コールスタックへのデータの追加が多すぎて、有効なメモリの範囲を超えてしまうことです。
スタックオーバーフローが起きると、ほかの用途で使われているメモリ領域の内容を破壊したり、実行時エラーになったりして、正常に処理が続けられない状態に陥ります。
コールスタックはサブルーチン(関数やメソッドなども含む)の呼び出し時にデータがプッシュ(追加)され、サブルーチンから抜け出すときにデータがポップ(削除)されます。そのため、スタックオーバーフローは、サブルーチンの呼び出しの連鎖が長く続いたときに起こります。典型的なのは、非常に呼び出し回数が多くなる再帰呼び出しです。
再帰呼び出しを活用するアルゴリズムの中には、スタックオーバーフローを避けるために、再帰しないように変形したタイプが知られているものがあります。
たとえば、クイックソートには再帰版と非再帰版があります(アルゴリズムとデータ構造編【整列】第6章を参照)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |