分段错误,大数组

时间:2011-10-26 11:56:48

标签: c segmentation-fault

#include <stdio.h>
#define N 1024
int main(){
  int i, j;
  int a[N][N];
  int b[N][N];
  for (i=0;i<N;i++){
    a[i][i]=i;
    b[i][i]=i;
  }
  for (i=0;i<N;i++)
    for(j=0;j<N;j++)
    {
         printf("%d", a[i][j]);
         printf("%d", b[i][j]);
    }
  return 0;
}

此程序是分段错误的原因,但如果我将N定义为1023,程序将正常工作。为什么会这样?

1 个答案:

答案 0 :(得分:29)

你堆满了。 2 * 1024 * 1024 * sizeof(int)对大多数系统来说都很重要。

最简单的解决方案是制作数组static

static int a[N][N];
static int b[N][N];

其他方法:

  • 使数组全局化(这与上面的基本相同)
  • 在循环中使用malloc,当然记得free

    int **a = malloc(N * sizeof *a);
    for (i = 0; i < N; i++)
        a[i] = malloc(N * sizeof *a[i]);