C ++ 2d向量下标超出范围错误

时间:2015-03-16 19:56:24

标签: c++ arrays object vector

目前在我的函数中,我有一个声明2d向量的方法。

vector <vector<test> > path(int x, int y) //Path function
{
vector <vector<test>> mazeArray(column, vector<test>(row)); //Declaring an object
    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[b][a].setX(b);
            mazeArray[b][a].setY(a);
        }
    }
}

例如,当我试图运行该函数时,路径(10,10)。

double for循环可以完美地运行而没有任何错误,但是如果我改变路径,例如路径(11,10)或路径(11,13)或两者都不相同的数字(int x和y ),将出现错误向量下标超出范围

为什么会这样?谁可以帮我这个事?有没有办法解决它,以便我输入的任何值都可以接受?谢谢。

2 个答案:

答案 0 :(得分:3)

mazeArray[b][a].setX(b); 

在此声明中,b可以在[0,row-1]之间变化,而mazeArray的尺寸为column * row。所以第一个索引只能有[0,column-1]的值。所以很可能,你需要像这样初始化矢量 - :

vector <vector<test>> mazeArray(row, vector<test>(column)); //Declaring an object

答案 1 :(得分:2)

函数中的循环

vector <vector<test> > path(int x, int y) //Path function
{
vector <vector<test>> mazeArray(column, vector<test>(row)); //Declaring an object
    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[b][a].setX(b);
            mazeArray[b][a].setY(a);
        }
    }
}

错了。你必须在指数中交换b和a。应该有

    for (int a = 0; a < column; a++)
    {
        for (int b = 0; b < row; b++)
        {
            mazeArray[a][b].setX(b);
            mazeArray[a][b].setY(a);
        }
    }
}

考虑到函数参数的含义不清楚,因为它们没有被使用。:)