Получение статуса выхода -1 при заполнении динамического массива - PullRequest
0 голосов
/ 28 февраля 2019

По какой-то причине, несмотря на то, что я выглядел и чувствовал себя настолько уверенно, насколько это возможно, я делаю это правильно, я продолжаю получать статус выхода -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 голосов
/ 28 февраля 2019

Ваша конкретная проблема проста для решения.Вы увеличиваете неправильную переменную во внутреннем цикле 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;

    }

}
0 голосов
/ 28 февраля 2019

Боюсь, вы не выглядели очень усердно

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::.

0 голосов
/ 28 февраля 2019

Поздравляю, ваш код работает нормально.Единственная проблема в том, что вы сделали опечатку.

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

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

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

    }

}

Также вы использовали статический предел «1».который может выдать ошибку, если строки / столбцы меньше 1.

...