当我在main中声明了我的2d数组时,为什么我的程序会退出

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

本文关键字:我的 为什么 程序 退出 数组 2d main 声明      更新时间:2023-10-16

我试图从文本文件中读取并将所有单词存储在2d数组中,但由于某种原因,我的代码只有在2d数组被声明为全局变量时才能工作(这是本项目不允许的(。当我把我的2d数组放在main中时(如代码示例所示(,我得到一个退出代码";处理结束,退出代码为-103741571(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>。然后,您可以分配尽可能多的内存,并通过自动释放(所谓的RAII(以安全的方式进行分配。

当它是全局变量时,它工作得很好,因为全局变量没有在堆栈上分配。

该错误表示堆栈溢出。您的数组太大,无法驻留在函数中。要么使它们全局化,要么最好使用new[]动态分配它们