2016-10-15 111 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变量,外主要的。全局变量位于数据段中,局部变量位于堆栈中,因此可能在这里堆栈溢出