【问题标题】:What is causing the array out of bounds runtime error?是什么导致数组越界运行时错误?
【发布时间】:2016-12-01 05:36:48
【问题描述】:

这是一个类的方法,用于查找表示为 3 维数组的 3 维迷宫的出口。数组本身包含长度为 1 或 0 的 6 字符串。字符串中的“1”表示您可以朝该方向移动。例如,如果当前数组元素处的字符串是100001,这意味着你可以向北移动,也可以向下移动一个级别。位串对应于北东南西上下方向。此方法目前尚未完成,因此我知道它尚未找到可行的解决方案,但最后的 switch 语句会在运行时导致数组越界错误。我将 3-d 数组描绘成一个 3-d 立方体,最外面的数组代表垂直轴,中间的数组代表进出页面的 z 轴,最里面的数组代表水平的 x 轴。在迷宫中的当前单元格时,您会查看字符串中的每个位。对于每个可能的移动,您将该移动添加到 q。查看完字符串后,您将朝第一次添加到队列中的方向移动并重复。非常感谢任何帮助。

void maze::solve(int startlevel, int startrow, int startcol, int endlevel,   int endrow, int endcol)
{
position current, exit;
current.level = startlevel;
current.row = startrow;
current.col = startcol;

exit.level = endlevel;
exit.row = endrow;
exit.col = endcol;

q.push('0');
while (!q.empty())
{
    if (current == exit)
    {
        cout << "exit found" << endl;
        return;
    }

    if (mazeGraph[current.level][current.row][current.col].at(0) == '1')
        q.push('n');
    if (mazeGraph[current.level][current.row][current.col].at(1) == '1')
        q.push('e');
    if (mazeGraph[current.level][current.row][current.col].at(2) == '1')
        q.push('s');
    if (mazeGraph[current.level][current.row][current.col].at(3) == '1')
        q.push('w');
    if (mazeGraph[current.level][current.row][current.col].at(4) == '1')
        q.push('u');
    if (mazeGraph[current.level][current.row][current.col].at(5) == '1')
        q.push('d');

    if (q.front() == '0')
        q.pop();

    switch (q.front())
    {
    case 'n':
        current.row -= 1;
    case 'e':
        current.col += 1;
    case 's':
        current.row += 1;
    case 'w':
        current.col -= 1;
    case 'u':
        current.level += 1;
    case 'd':
        current.level -= 1;

    }

}   
return;
}

【问题讨论】:

    标签: c++ arrays bounds breadth-first-search


    【解决方案1】:

    要调试,在访问mazeGraph[current.level][current.row][current.col] 之前,您应该检查current.level 是否在minLevel 和maxLevel 之间,类似于current.row 和current.col 都在mazeGraph 的范围内。如果他们没有使用current.level 打印消息,您就会知道它为什么会抛出该错误。

    我还假设您的 mazeGraph 已初始化为满足开始和结束级别等的边界。

    PS:为了更好地在矩阵中的两个节点之间进行寻路,发现 A*(A 星)算法在许多情况下是更好的解决方案。

    【讨论】:

    • 我正在尝试使用 "if (current.level = this.numlevels) { cout
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2018-09-01
    • 2013-01-16
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多