为什么以下代码导致分段错误11?

时间:2014-03-26 04:39:19

标签: c

以下代码在运行时产生分段错误11,我无法弄清楚原因。有人能提供一些见解吗?提前谢谢。

#include <stdio.h>
int main() {
int s, e;
int i,j;
typedef struct coordinate {
   int x;
   int y;
} coordinate;

typedef struct cell {
   int altitude;
   coordinate lowest_neighbor;
   int visited;
   int basin;
} cell;

cell cells[1000][1000];
for (i = 0; i < 1000; i++){
    for (j = 0; j < 1000; j++){
        cells[i][j].altitude = 9;
    }
}
printf("%d", cells[0][0].altitude);


return 0;

}

1 个答案:

答案 0 :(得分:1)

因为:

cell cells[1000][1000];

正在吹嘘你的筹码。假设结构中没有填充的四字节int,该数组占用二千万个字节,对于堆栈来说相当多。

作为一个快速修复(无论如何),试试:

static cell cells[1000][1000];

,对于许多实现来说,它将把它从堆栈中取出。

这种方法通常有缺点,因为这意味着只有一个数组的副本,而不是每个函数调用或线程的一个副本,但这在此处无关紧要,因为您的程序只创建无论如何它曾经。