簡體   English   中英

當我在 main 中聲明了我的二維數組時,為什么我的程序會退出?

[英]Why do does my program exit when I have my 2d array declared in main?

我正在嘗試從文本文件中讀取並將所有單詞存儲在 2d 數組中,但由於某種原因,我的代碼僅在我的 2d 數組被聲明為全局變量時才有效(此項目不允許這樣做)。 當我將二維數組放在 main 中時(如代碼示例所示),我得到一個退出代碼“進程完成,退出代碼 -1073741571 (0xC00000FD)”。 知道為什么會這樣嗎?

char theWord[maxLength]; // declare input space to be clearly larger than largest word

char dict_array[maxWords][maxLength];

while (inStream >> theWord) {
    
    for (int i = 0; i < strlen(theWord); i++) {

        dict_array[count][i] = tolower(theWord[i]);

    }

    if (strlen(theWord) >= 3) {
        count++;
    }

你來對地方問這個問題了,因為0xC00000FD意味着堆棧溢出!

您的代碼失敗,因為char dict_array[maxWords][maxLength]大於進程中的可用堆棧空間。 您可以通過使用std::vectoroperator new[]malloc()分配數組來輕松解決此問題,或者您可以通過增加堆棧大小來修復它(如何做到這一點取決於您的操作系統,就像我說的那樣,這很困難,不要打擾)。

這個問題最慣用的解決方案是std::vector<std::string> 然后,您可以分配盡可能多的 memory,並通過自動釋放(所謂的 RAII)以安全的方式進行。

當它是一個全局變量時,它可以正常工作,因為全局變量沒有在堆棧上分配。

該錯誤表示堆棧溢出。 您的 arrays 太大,無法安裝在 function 內。 要么將它們設為全局,要么最好使用new[]動態分配它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM