对于下面的简单代码,每当我输入值 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秒按任意键继续。
根据此 Microsoft 文档,状态代码0xC00000FD代表STATUS_STACK_OVERFLOW. 您的程序由于堆栈溢出而失败。
默认情况下,Windows 程序的最大堆栈大小约为 1 MB。如果你输入数字200000,那么你的变长数组就会超出这个限制,导致堆栈溢出。
您可能需要考虑在堆而不是堆栈上为数组分配内存,例如使用函数malloc。堆不存在只能分配最多 1 MB 的限制。它能够存储更大量的数据。