我收到错误“段错误(核心已转储)
如果循环数 = 207500 或更小,这两种方法都有效。但是,如果我增加此值(例如 2100000),我会收到错误
#include <stdlib.h>
void main()
{
long i;
long loops;
loops = 2075000; // works
loops = 2100000; // Segmentation fault (core dumped)
if (1) {
int arr[loops]; // stack array
for (i = 0; i < loops; i++) {
arr[i] = 3;
}
}
if (1) {
int *arr = (int *) malloc(sizeof(int) * loops); // heap array
for (i = 0; i < loops; i++) {
arr[i] = 3;
}
}
}
我通过分配了 8GB RAM 的 Virtual Box 使用 Ubuntu 12.04 LTS
最佳答案
堆栈溢出,与堆相比,堆栈空间非常有限。您可以找到列出的典型堆栈大小 Stack Overflow Problems article :
platform default size
=====================================
SunOS/Solaris 8172K bytes
Linux 8172K bytes
Windows 1024K bytes
cygwin 2048K bytes
另一种方法是通过 malloc
动态分配数组,这将使用更丰富的堆。
关于C - 巨大数组 - 段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22522769/