スタックオーバーフロー (stack overflow) は、プログラム中での関数呼び出しが多すぎる時に発生する、バッファオーバーフローの一種である。オペレーティングシステムや実行オプションによるが、コールスタックに格納できる情報量には上限がある。コールスタックに蓄積するデータ量が多すぎるとスタックは「オーバーフロー」し、プログラム側で対策をとっていなければ通常はクラッシュしてしまう。ただし、スタックオーバーフローの原因となりうるコーディング技法は比較的限定されており、市販ソフトウェアでこれが発生した場合はそのソフトハウスの開発能力が極めて低い事を自白するようなものである。スタックオーバーフローの一番の原因は再帰による無限ループである。ただし、末尾最適化を実装した言語では末尾再帰をループへ展開することができ、末尾再帰ではスタックオーバーフローは起こらない。末尾再帰はループ処理に最適化されるので、再帰することそれ自体でスタックを消費することが無いからである。次によくある原因としては、スタック上に巨大な配列を確保しようとすることである。コールスタックに格納できる情報量には上限があるため、巨大な局所変数はコールスタックに格納するのではなくヒープ領域などを明示的に利用すべきである。さらに他の原因として、関数呼び出しの階層数が深すぎる場合などがある。codice_1 は codice_2 を呼び出しているが、codice_2 もやはり codice_1 を呼び出している。交互の呼び出しは終わることがなく、最終的にはスタックオーバーフローが発生する。この場合は、以下のように配列を静的領域に移動するか、malloc などを使ってヒープ領域に確保すればスタックオーバーフローは回避できる。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。