関数を呼び出す度に、メモリ上のスタック領域にはローカル変数とリターンアドレスが格納される。
下のプログラムは、関数functionの中で1000個の要素を持つ配列を確保した後、再度自らを呼び出してまた1000個の要素を持つ配列を確保する関数です。
無限に配列が作成されるためスタック領域は容量オーバーをおこしてしまします。このことを「スタックオーバーフロー」と呼びます。
#include<stdio.h>
void function()
{
char str[1000];
printf("%p\n", str);
function();
}
int main(void)
{
function();
return 0;
}
実行例
0xbff405b4
0xbff401a4
0xbff3fd94
0xbff3f984
0xbff3f574
0xbff3f164
0xbff3ed54
0xbff3e944
0xbff3e534
0xbff3e124
0xbff3dd14
0xbff3d904
・・・・以下続く・・・・