C中的分段错误(溢出?)

时间:2016-08-08 01:21:33

标签: c segmentation-fault

这是我发生的代码和分段错误的一部分:

int main (int argc, char *argv[]) {
  printf ("====================================================\n");
  double pointArray[MAX_NUM_OF_POINTS][DIMENSION];
  double range;
  int num_of_nearest;
  double queryPoint[DIMENSION];
  int counter;
  int dist;
  int num;
  printf ("====================================================\n");
}

其中MAX_NUM_OF_POINTS被定义为100,000,000。

但是,当我将此数字更改为100,000,则分段错误消失了。

有人可以告诉我原因吗?

1 个答案:

答案 0 :(得分:2)

在堆栈上创建局部变量,其空间有限。通过尝试创建一个至少有100000000个双精度数组,每个数组大概是8个字节,它对于堆栈而言太大而导致段错误。

如果将数组声明为全局数组,则它不会驻留在堆栈上,而是驻留在数据段中,而不是数据段,它可以处理更大的变量。或者,您可以使用malloc动态创建数组,在这种情况下它将存在于堆栈中。

然而,这提出了一个问题,即为什么需要一个大的数组。您可能需要重新考虑您的设计,看看是否有更高效的内存方式来实现您的目标。