2017-09-30 33 views
0

這裏是一個是給分段錯誤使用函數的代碼有什麼錯誤?

#include<stdio.h> 

void fun(); 

int main() { 
    fun(); 
    return 0; 
} 

void fun() { 
    int i; 
    for (i=0;i <4;i++) { 
     fun(); 
     printf ("%d",i); 
    } 
} 
+0

爲什麼遞歸調用'fun()'如果它什麼都不返回? – Mark

+3

問題是這個網站的名稱:)。你有不定的遞歸,導致堆棧溢出。 –

+1

C!= C++。使用您實際使用的語言進行標記。也就是說,它看起來像你使用C,因爲你包含'stdio.h'。 – tambre

回答

5

在下面的代碼

void fun() { 
    int i; 
    for (i=0;i<4;i++) { 
     fun(); 
     printf ("%d",i); 
    } 
} 

你正在做一個無限循環的示例代碼。函數fun()自己調用,遞歸沒有退出條件。所以最終功能堆棧將會耗盡,你會得到分段錯誤。

1

這是因爲您正在進入導致堆棧溢出的無限遞歸。你必須爲你的遞歸函數添加一個基本情況才能退出。