为什么我在C中声明堆栈中的大型数组会出现段错误?

Cla*_*diu 2 c stack

我从这行代码中得到了一个段错误:

int fatblob[1820][286][5];
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Nik*_*sov 8

因为您的堆栈段小于1820*285*5 ints.它通常在1MB左右.

  • *sizeof(int),在理智的32位系统上超过9MB. (2认同)

JSB*_*ոգչ 7

您正在尝试分配1820 * 285 * 5 * sizeof(int)bytes =大约10MB(如果sizeof(int) == 4).这可能比你的操作系统默认提供的堆栈分配更多的字节,所以你得到一个堆栈溢出/段错误.

您可以通过在创建线程时请求额外堆栈,在堆上分配或更改操作系统默认值来解决此问题.