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

时间:2017-03-29 01:47:52

标签: c++ pointers

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

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;
}

它编译但是有一个运行时错误,我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

ControlX都等于7,但是你说:Y - 所以你正在运行数组的末尾。数组变为0..6但您访问索引7。

使用for (int x = 0; x < 8; x++)你会好得多 - 这就是使这些值具有象征意义而不仅仅是硬编码的重点。

一旦你点击“10个房间”,你也停止设置值 - 关于使用默认值的评论可能是有序的(为什么不填写10个房间后打破循环?) - 最后但并非最不重要:通过使用因为这样,无法保证你真正得到任何房间。他们都可能虚假......