2016-10-15 110 views
0

下面的代碼顯示段錯誤(?我不知道爲什麼) 輸入是二維數組的限度內C:如何解決這個段錯誤

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 

int main() { 
    int ar[10000][10000],n,m,i,j; 

    scanf("%d%d",&n,&m); 
    for(i=1;i<=m;i++) 
    { 
     for(j=1;j<=n;j++) 
     { 
      ar[i][j]=0; 
     } 
    } 

    for(i=1;i<=n;i++) 
    { 
     scanf("%d",&ar[1][i]); 
    } 
    for(i=2;i<=m;i++) 
    { 
     for(j=1;j<=n;j++) 
     { 
      if(j!=n) 
      { 
       ar[i][j]=ar[i-1][j]^ar[i-1][j+1]; 
      } 
      else 
      { 
       ar[i][j]=ar[i-1][j]^ar[i-1][1]; 
      } 
     } 
    } 
    for(i=1;i<=n;i++) 
    { 
     printf("%d ",ar[m-1][i]); 
    } 
} 
+4

您正在堆棧上創建一個100M陣列? – stark

+0

你正在棧上創建一個'10000 * 10000'' int'數組,這就是爲什麼。在堆上使用'malloc'創建這個數組,你可能不會再有這個段錯誤了。 –

+0

你的循環是錯誤的。 C中的數組從零到'n-1'。所以你的循環應該是'for(i = 0; i

回答

1

定義你的數組作爲gloabal變量,外主要的。全局變量位於數據段中,局部變量位於堆棧中,因此可能在這裏堆棧溢出