上級 › Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー) › パターン3
Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー)
再帰関数に正しい終了条件(ベースケース)が無いと、関数呼び出しのたびにスタック領域が積み上がり続け、上限に達した時点でクラッシュします。
1 #include <stdio.h> 2 3 int power(int base, int exp) { 4 if (__________) { ^ 5 return 1; 6 } 7 return base * power(base, exp - 1); 8 } 9 10 int main(void) { 11 printf("%d\n", power(2, 4)); 12 return 0; 13 }
Segmentation fault
空欄を埋めてコンパイル・実行を通す
呼び出しが数千〜数万回に達するまで正常に動いているように見えることもありますが、スタック領域はヒープよりずっと小さいため、いずれ必ず上限に達してクラッシュします。
次の問題