C - 巨大的阵列 - 分段故障(核心转储)

时间:2014-03-20 03:16:42

标签: c arrays

我收到错误“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

1 个答案:

答案 0 :(得分:1)

堆栈溢出,堆栈空间与堆相比非常有限。您可以找到Stack Overflow Problems article列出的典型堆栈大小:

platform    default size       
=====================================
SunOS/Solaris  8172K bytes
Linux          8172K bytes
Windows        1024K bytes
cygwin         2048K bytes 

另一种方法是通过malloc动态分配你的数组,这将使用更丰富的堆。