我试图从文本文件中读取并将所有单词存储在二维数组中,但由于某种原因,我的代码仅在我的二维数组被声明为全局变量时才有效(该项目不允许这样做)。当我将二维数组放入 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::vector
分配数组来轻松解决此问题。 , operator new[]
,或malloc()
,或者您可以通过增加堆栈大小来以困难的方式修复它(如何做到这一点取决于您的操作系统,就像我说的那样,这是困难的方法,不用费心)。
此问题最惯用的解决方案是 std::vector<std::string>
。然后,您可以分配系统拥有的尽可能多的内存,并通过自动释放(所谓的 RAII)以安全的方式执行此操作。
当它是全局变量时,它可以正常工作,因为全局变量不是在堆栈上分配的。
关于c++ - 当我在 main 中声明二维数组时,为什么我的程序会退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62844965/