填充动态数组时获取退出状态-1
Getting exit status -1 when filling a dynamic array
出于某种原因,即使我已经查看并尽可能确定自己做对了,但我一直在这段代码中获得退出状态 -1。我只是想创建一个动态二维数组并用 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 以防万一:
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++ 的新手,所以如果这是一个明显的错误,请放轻松。感谢您的帮助。
恭喜,您的代码运行良好。唯一的问题是你打错了字。
for(int i = 0; i < 1; i++){
for(int j = 0; j < 1; j++){ //previously was i++
Grid::grid[i][j] = 0;
}
}
此外,您使用了静态限制“1”。如果 rows/cols 小于 1.
会抛出错误
您的具体问题很容易解决。您在内部 for-loop
中增加了错误的变量
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;
}
}
恐怕你没仔细看
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
而不是 rows
和 cols
.
并且不需要在成员变量前加上 Grid::
前缀。
出于某种原因,即使我已经查看并尽可能确定自己做对了,但我一直在这段代码中获得退出状态 -1。我只是想创建一个动态二维数组并用 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 以防万一:
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++ 的新手,所以如果这是一个明显的错误,请放轻松。感谢您的帮助。
恭喜,您的代码运行良好。唯一的问题是你打错了字。
for(int i = 0; i < 1; i++){
for(int j = 0; j < 1; j++){ //previously was i++
Grid::grid[i][j] = 0;
}
}
此外,您使用了静态限制“1”。如果 rows/cols 小于 1.
会抛出错误您的具体问题很容易解决。您在内部 for-loop
中增加了错误的变量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;
}
}
恐怕你没仔细看
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
而不是 rows
和 cols
.
并且不需要在成员变量前加上 Grid::
前缀。