这是我发生的代码和分段错误的一部分:
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,则分段错误消失了。
有人可以告诉我原因吗?
答案 0 :(得分:2)
在堆栈上创建局部变量,其空间有限。通过尝试创建一个至少有100000000个双精度数组,每个数组大概是8个字节,它对于堆栈而言太大而导致段错误。
如果将数组声明为全局数组,则它不会驻留在堆栈上,而是驻留在数据段中,而不是数据段,它可以处理更大的变量。或者,您可以使用malloc
动态创建数组,在这种情况下它将存在于堆栈中。
然而,这提出了一个问题,即为什么需要一个大的数组。您可能需要重新考虑您的设计,看看是否有更高效的内存方式来实现您的目标。