分配多维数组VS C ++

时间:2012-03-05 00:30:49

标签: c++ visual-studio-2010 multidimensional-array

我正在使用VS2010控制台应用程序中的2D数组。我正在分配数组:

Thing::Thing(int _n, bool _control){
    m = _n;
    control = _control;
    thisArray = new int*[m];
    for(int ii = 0; ii < m; ii++){
        thisArray[ii] = new int[m];
        for (int jj = 0; jj < m; jj++){
            thisArray[ii][jj] = 0;
        }
    }
    if (control == true){
        int num = 1;
        for (int jj = 0; jj < m; jj++){
            for ( int ii = 0; ii<m; ii++){
                if ((jj == (m-1)) && (ii == (m-1))){
                    std::cout << "inserting " << 0 <<
                        "at[" << ii << "][" << jj << "]" << std::endl;
                    thisArray[ii][jj] = 0;
                    std::cout << thisArray[ii][jj] << std::endl;
                } else{
                    std::cout << "inserting " << num <<
                        "at[" << ii << "][" << jj << "]" << std::endl;
                    thisArray[ii][jj] = num++;
                    std::cout << thisArray[ii][jj] << std::endl;
                }
            }
        }
        pi.x = m-1;
        pi.y = m-1;
    }
}

然后我尝试通过

显示它
void Thing::display(){
    int x = 0;
    int y = 0;
    for( ; y < m; y++){
        for( x = 0; x < m; x++){
            if (Point(x, y) == pi){
                std::cout << "[  ]";
            }
            std::cout << "[" << thisArray[x][y] << "]";
            if ( x == m ){
                std::cout << std::endl;
            }
        }
    }
}

但是当我传入4时,它似乎只显示第一个维度作为输出,而true看起来像这样:

inserting 1 at[0][0]1
inserting 2 at[1][0]2
inserting 3 at[2][0]3
inserting 4 at[3][0]4
inserting 5 at[0][1]5
inserting 6 at[1][1]6
inserting 7 at[2][1]7
inserting 8 at[3][1]8
inserting 9 at[0][2]9
inserting 10 at[1][2]10
inserting 11 at[2][2]11
inserting 12 at[3][2]12
inserting 13 at[0][3]13
inserting 14 at[1][3]14
inserting 15 at[2][3]15
inserting 0 at[3][3] 0
[1][2][3][4]

,当我将数组添加到我的监视列表时,系统会显示指向单个值的指针,然后只显示第一个元素,而不是所有元素。

它不会抛出任何运行时访问错误,或类似的东西,但是当我尝试显示数组时,它只会执行第一行。注意:我被要求使用实际的二维整数数组,不允许使用预先编写的库或单维谎言。

编辑:添加了额外的输出信息。 edit2(已解决):在显示中将第二个for循环更改为

for (x = 0; x < m; x++)

当保持for循环外部的值时,确保它们被重置为循环迭代。

1 个答案:

答案 0 :(得分:2)

在显示功能中,您必须在外部x循环的每次迭代中重置y。 如果你在for语句中进行了初始化,那就更清楚了:

for(int y = 0; ; y < m; y++){
    for(int x = 0; ; x < m; x++){

要在Visual C ++调试器中将指针视为数组,您可以查看that other question