当我输入值 200000 作为 long 变量的输入时,C 程序崩溃,为什么?

Mar*_*tef 0 c long-integer

对于下面的简单代码,每当我输入值 200,000(或任何其他高值)时,程序就会崩溃:

    long size;
    printf("Enter the size of the array to be sorted: ");
    scanf("%ld",&size);
Run Code Online (Sandbox Code Playgroud)

有人能告诉我为什么吗?根据我的信息,long的范围远大于200,000

TIA

编辑:上一段代码后面是这些声明。

int arrMerge[size];
int arrQuick[size];
int arrSelect[size];
int arrInsert[size];
Run Code Online (Sandbox Code Playgroud)

当我评论除这些行(以及上面的行)之外的整个程序时,它已经崩溃了。给出了以下终止消息:

进程返回-1073741571(0xC00000FD)执行时间:2.419秒按任意键继续。

And*_*zel 5

根据此 Microsoft 文档,状态代码0xC00000FD代表STATUS_STACK_OVERFLOW. 您的程序由于堆栈溢出而失败。

默认情况下,Windows 程序的最大堆栈大小约为 1 MB。如果你输入数字200000,那么你的变长数组就会超出这个限制,导致堆栈溢出。

您可能需要考虑在堆而不是堆栈上为数组分配内存,例如使用函数malloc。堆不存在只能分配最多 1 MB 的限制。它能够存储更大量的数据。