上級 › Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー) › パターン1
Segmentation fault(再帰関数の終了条件忘れによるスタックオーバーフロー)
再帰関数に正しい終了条件(ベースケース)が無いと、関数呼び出しのたびにスタック領域が積み上がり続け、上限に達した時点でクラッシュします。
1 #include <stdio.h> 2 3 int factorial(int n) { 4 if (________) { ^ 5 return 1; 6 } 7 return n * factorial(n - 1); 8 } 9 10 int main(void) { 11 printf("%d\n", factorial(5)); 12 return 0; 13 }
Segmentation fault
空欄を埋めてコンパイル・実行を通す
if (0)は常に偽なので、終了条件が一度も成立せずn-1、n-2……と再帰が終わらなくなります。関数呼び出しのたびにスタックが積み上がり、上限に達するとクラッシュします。
次の問題