我收到错误“Segmentation fault(core dumped)
如果循环= 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;
}
}
}
我正在使用Ubuntu 12.04 LTS通过虚拟盒分配8gb ram
答案 0 :(得分:1)
堆栈溢出,堆栈空间与堆相比非常有限。您可以找到Stack Overflow Problems article列出的典型堆栈大小:
platform default size
=====================================
SunOS/Solaris 8172K bytes
Linux 8172K bytes
Windows 1024K bytes
cygwin 2048K bytes
另一种方法是通过malloc
动态分配你的数组,这将使用更丰富的堆。