以下代码在运行时产生分段错误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;
}
答案 0 :(得分:1)
因为:
cell cells[1000][1000];
正在吹嘘你的筹码。假设结构中没有填充的四字节int
,该数组占用二千万个字节,对于堆栈来说相当多。
作为一个快速修复(无论如何),试试:
static cell cells[1000][1000];
,对于许多实现来说,它将把它从堆栈中取出。
这种方法通常有缺点,因为这意味着只有一个数组的副本,而不是每个函数调用或线程的一个副本,但这在此处无关紧要,因为您的程序只创建无论如何它曾经。