随机生成的多维布尔指针错误

Randomly generated multidimensional Boolean pointer error

本文关键字:布尔 指针 错误 随机      更新时间:2023-10-16

我让这个函数随机生成真/假值并将它们分配给多维指针,然后返回指针。

bool** generateMap()
{
    int randNum = 0;
    int X = 7;
    int Y = 7;
    bool** MAP = new bool*[X];
    for (int i = 0; i < X; ++i)
        MAP[i] = new bool[Y];
    for (int x = 0; x < 8; x++)
    {
        int rooms = 0;
        for (int y = 0; y < 8; y++)
        {
                if (rooms < 10)
                {
                    randNum = rand() % 6;
                    switch (randNum)
                    {
                    case 0:
                        MAP[x][y] = true;
                        ++rooms;
                        break;
                    case 1:
                        MAP[x][y] = false;
                        break;
                    case 2:
                        MAP[x][y] = false;
                        break;
                    case 3:
                        MAP[x][y] = false;
                        break;
                    case 4:
                        MAP[x][y] = false;
                        break;
                    case 5:
                        MAP[x][y] = false;
                        break;
                    default:
                        break;
                    }
                }
                else
                {
                }
        }
    }
    return MAP;
}

它可以编译,但存在运行时错误,我的代码有什么问题?

XY 都等于 7,但你说:for (int x = 0; x < 8; x++) - 所以你跑掉了数组的末端。数组变为 0..6,但您访问索引 7。

使用for (int x = 0; x < X; x++)会更好 - 这就是使这些值具有符号性而不仅仅是硬编码7的重点。

一旦你点击"10个房间",你也会停止设置值 - 关于使用默认值的评论可能是有序的(为什么不打破循环,一旦你填充了10个房间?( - 最后但并非最不重要的一点是:以这种方式使用for,不能保证你真的会得到任何房间。他们都可能出现错误...