使用变量启动数组时的分段错误

use*_*561 3 c arrays segmentation-fault

这是我发布的第一个问题,如果我做任何失礼,我很抱歉

使用C.

在我的程序中,我创建了一个全局变量指针

double *correlationData;
Run Code Online (Sandbox Code Playgroud)

在main中我创建了这个局部变量:

int arrayLength = 0;
Run Code Online (Sandbox Code Playgroud)

在main中,我在for循环中有一个if语句,其中包含

arrayLength++;
Run Code Online (Sandbox Code Playgroud)

在for循环之后,我启动一个数组并将其分配给指针

double correlationArray[arrayLength];
correlationData = correlationArray; 
Run Code Online (Sandbox Code Playgroud)

但是我在代码的这一部分遇到了"分段错误",我无法弄清楚原因.如果我打印出arrayLength它是1900000.首先我想也许这对于一个数组来说太大了所以我试过了

correlationData = correlationArray[1900000];
Run Code Online (Sandbox Code Playgroud)

这没有任何错误.为什么我收到此错误?

Mys*_*ial 6

这是由于stackoverflow.您正在堆栈上创建一个大型数组.

1900000双打是~15 MB.典型的堆栈大约为1 MB.

您需要做的是使用动态分配它malloc().

在你的第二个测试用例中:

correlationData = correlationArray[1900000];
Run Code Online (Sandbox Code Playgroud)

这不会使阵列.这只是一个狂野的阵列访问,(un)幸运地没有崩溃.