填充动态数组时获得退出状态-1

时间:2019-02-28 06:51:51

标签: c++ multidimensional-array dynamic-memory-allocation exitstatus

由于某种原因,即使我已经尽我所能确保自己做对了,但在此代码中,我仍然保持退出状态-1。我只是试图创建一个动态2D数组,并用0填充每个值:

Grid::Grid(int _rows, int _cols){

    Grid::rows = _rows;
    Grid::cols = _cols;

    Grid::grid = new int*[Grid::rows];

    for(int i = 0; i < Grid::rows; i++){

        Grid::grid[i] = new int[Grid::cols];

    }

    for(int i = 0; i < 1; i++){

        for(int j = 0; j < 1; i++){

            Grid::grid[i][j] = 0;

        }

    }
}

我已经进行了一些测试,当我尝试填充数组时,代码没有第二个for循环就可以正常运行,所以我认为问题就在这里,即使我看不出问题出在哪里。 。

这里是为了防万一:

class Grid{

    private:

    int rows;
    int cols;
    int** grid;

    public:

    Grid(int _rows, int _cols);
    int getRows(){return rows;}
    int getCols(){return cols;}
    int** getGrid(){return grid;}
    void deleteArray();

};

我是c ++的新手,所以如果这是一个明显的错误,请对我轻松一点。感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

恐怕你看起来还不是很辛苦

for(int i = 0; i < 1; i++){

    for(int j = 0; j < 1; i++){

        Grid::grid[i][j] = 0;

    }

}

应该是

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        grid[i][j] = 0;
    }
}

您在内部循环中增加了错误的变量(这意味着它将永远循环)。出于某种原因,您在循环中的限制为1,而不是rowscols

并且无需在成员变量前加上Grid::

答案 1 :(得分:0)

恭喜,您的代码可以正常工作。唯一的问题是您打错了字。

for(int i = 0; i < 1; i++){

    for(int j = 0; j < 1; j++){ //previously was i++

        Grid::grid[i][j] = 0;

    }

}

此外,您还使用了静态限制“ 1”。如果行/列小于1,则会引发错误。

答案 2 :(得分:0)

您的特定问题很容易解决。您在内部for循环中增加了错误的变量

for(int i = 0; i < Grid::rows; i++){ // loop over all elements

    for(int j = 0; j < Grid::cols; j++){ // j++ NOT i++ // also loop over all elements

        Grid::grid[i][j] = 0;

    }

}

我在这里的建议是使用更长的变量名,它们的区别更大。

for(int idx_row = 0; idx_row < Grid::rows; ++idx_row){

    for(int idx_col = 0; idx_col < Grid::cols; idx_col++){

        Grid::grid[idx_row][idx_col] = 0;

    }

}