c - 为什么以下代码会导致段错误 11?

标签 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;

}

最佳答案

因为:

cell cells[1000][1000];

正在耗尽你的堆栈。假设结构中没有填充的四字节int,该数组占用两千万字节,对于堆栈来说相当多。

作为快速修复(无论如何对于这个程序),请尝试:

static cell cells[1000][1000];

对于许多实现来说,这会将其从堆栈中取出。

这种方法通常有缺点,因为这意味着只有一个数组副本,而不是每个函数调用或线程一个,但这在这里并不重要,因为你的程序只创建反正就一次。

关于c - 为什么以下代码会导致段错误 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22651599/

相关文章:

c - Linux 中的 pthread_mutex_trylock()

c - 在文件服务器中休眠工作线程

c - 如何在其他地方的函数中使用变量的值?

c - 为什么 malloc 不能与 strcpy 一起使用?

c - 如何将 "split"long WndProc方法转成多个函数?

c - 创建对象排队列表时出现段错误

c - 当数据变大时在c中搜索二叉树

c - 开始使用支持 UNICODE 的 WINAPI 编程

c++ - 在 C/C++ 中有效存储排序列表

java - 使用 native 语言为 C 或 C++ 的 JNI 接口(interface)在 Java 中实现 USB 通信是个好主意吗?