2017-11-11 139 views
-1
  1. 當此代碼運行時,它顯示分段故障。但是,當地址(LessThan)countarray更改爲地址< = countarray時,它可以工作。我只是想讓它打印一個較少的數組,但它不允許我。使用陣列時C中的Segementation故障

    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main() 
    { 
    int n,check,divisor,countarray,address; 
    int pn[100]; 
    
    for (n=2;n<100;n++){ 
        for (divisor=2;divisor<n;divisor++){ 
         if ((n/divisor)*divisor==n) //if (n is not a prime number) 
          check++; 
        } 
        if (check==0){     //if its a prime number, 
         pn[countarray]=n; 
         countarray++; 
        } 
    
        check=0; 
    
    } 
    
    for (address=0;address<countarray;address++) 
        printf("address for %d is %d and ",pn[address],address); 
    
    
    return 0; 
    } 
    
+1

'countarray'未被初始化。也檢查。 – alk

+0

您可能想要閱讀以下內容:[如何調試小程序](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – alk

+2

在初始化之前使用許多變量。未初始化的本地變量將具有*不確定*值,這看起來是隨機的。例如,如果'countarray'的值超出了'pn'數組的範圍,該怎麼辦?然後'pn [countarray] = n'會導致[* undefined behavior *](https://en.wikipedia.org/wiki/Undefined_behavior)。 –

回答

3

沒有與條件address<countarray沒有問題,你應該初始化檢查 & countarray變量。

int n,check=0,divisor,countarray=0,address;