#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,程序将正常工作。为什么会发生这种情况?
最佳答案
你的堆栈溢出了。 2 * 1024 * 1024 * sizeof(int)
对于大多数系统来说已经很多了。
最简单的解决方案是使数组静态
。
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]);
关于c - 段错误,大型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196999/