對于下面的簡單代碼,每當我輸入值200000(或任何其他高值),程序就會崩潰:
long size;
printf("Enter the size of the array to be sorted: ");
scanf("%ld",&size);
有人能告訴我為什么嗎?根據我的信息,長距離的范圍遠遠大于200000
TIA
編輯:前一段代碼后面是這些聲明。
int arrMerge[size];
int arrQuick[size];
int arrSelect[size];
int arrInsert[size];
當我對整個程序(除了上面的幾行)發表評論時,它崩潰了。給出了以下終止消息:
進程返回-1073741571(0xC00000FD)執行時間:2.419秒按任意鍵繼續。
根據這個Microsoft文檔,狀態代碼
0xC00000FD
代表STATUS_STACK_OVERFLOW
。由于堆棧溢出,您的程序失敗。默認情況下,Windows程序的最大堆棧大小約為1 MB。如果輸入
200000
,那么variable-length數組將超過此限制,導致堆棧溢出。您可能想考慮為堆上的數組分配內存,而不是堆棧,例如使用函數
malloc
。堆沒有只能分配最多一個兆字節的限制。它能夠存儲大量的數據。