我有这个函数随机生成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;
}
它编译但是有一个运行时错误,我的代码出了什么问题?
答案 0 :(得分:2)
Control
和X
都等于7,但是你说:Y
- 所以你正在运行数组的末尾。数组变为0..6但您访问索引7。
使用for (int x = 0; x < 8; x++)
你会好得多 - 这就是使这些值具有象征意义而不仅仅是硬编码的重点。
一旦你点击“10个房间”,你也停止设置值 - 关于使用默认值的评论可能是有序的(为什么不填写10个房间后打破循环?) - 最后但并非最不重要:通过使用因为这样,无法保证你真正得到任何房间。他们都可能虚假......