c++ - 当我在 main 中声明二维数组时,为什么我的程序会退出?

标签 c++ arrays

我试图从文本文件中读取并将所有单词存储在二维数组中,但由于某种原因,我的代码仅在我的二维数组被声明为全局变量时才有效(该项目不允许这样做)。当我将二维数组放入 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/

相关文章:

c++ - 如何渲染到不同的层,然后将它们与 OpenGL 组合在一起?

c++ - Boost Beast Async Websocket Server 如何与 session 交互?

c++ - 如何比较两个字符串?

java - 如何打印元音、数字等列表?

c++ - 有没有什么情况你不想包括 guard ?

c++ - calloc 覆盖另一个变量的内存?

javascript - 交换任意 3D 数组值

javascript - ES6 返回包含两个数组中的值的对象

python - 在 Numpy 数组的一个标题下合并两列

计算一个字符在数组中出现的次数