首页 > 解决方案 > C++ 访问冲突读取位置 0xE3A26369

问题描述

我正在尝试创建一个简单的 2D 并在收到此提示时输出数组,即访问冲突读取位置 0xE3A26369。我不知道为什么会发生这种情况,因为我以前做过这个,它从来没有给我这个问题。

{
    string Board[6][6] = { "test", "test", "test", "test", "test",
                           "test", "test", "test", "test", "test",
                           "test", "test", "test", "test", "test", 
                           "test", "test", "test", "test", "test",
                           "test", "test", "test", "test", "test" };

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << Board[i][j] << endl; //this line 

        }
        cout << endl;
    }

    


    system("pause");
    return 0;

}

有人可以向我解释这里发生了什么吗?

标签: c++access-violation

解决方案


您正在尝试访问超出范围的数组索引(两个方向的索引 6 到 9),因为Board它只有 6x6。这会给您带来访问冲突,因为内存超出了程序的范围,并且不允许程序访问它。

要解决此问题,只需在 0 到 5 (<6) 上迭代 i 和 j。此外,请考虑改用向量,因为它们有一个内置size函数,您可以将其用作边界(v.size()以及v[0].size每个方向)。

此外,您只填充Board了 5x5 值,而不是 6x6,这可能会给您带来您不想要的行为(尽管可能不是您现在看到的错误)。


推荐阅读