Нарушение прав доступа на чтение c++

415
08 августа 2021, 04:00

Понимаю вопрос заезженный, но ответа в уже заданных вопроса я не нашел.

Есть класс Matrix

    class Matrix {
private:
    int rows, cols;
public:
    int **arr;
    int GetRows() { return rows; }
    int GetCols() { return cols; }
private:
    void InitMatrix() {
        arr = new int*[rows];
        for (int i = 0; i < rows; i++)
            arr[i] = new int[cols];
    }
public:
    Matrix(int rows, int cols) {
        this->rows = rows;
        this->cols = cols;
        InitMatrix();
    }
    void RFill(int leftBorder, int rightBorder) {
        for (int i = 0; i < rows; i++)
            for (int j = 0; j < cols; j++)
                arr[i][j] = rand() % (rightBorder + 1 - leftBorder) + leftBorder;
    }
    void Add(Matrix sarr) {
        for (int i = 0; i < this->rows; i++)
            for (int j = 0; j < this->cols; j++)
                this->arr[i][j] += sarr.arr[i][j];
    }
    ~Matrix() {
        for (int i = 0; i < rows; i++)
            delete[] arr[i];
        delete[] arr;
        arr = nullptr;
    }
};

Вроде выделяется память правильно, но когда происходит удаление возникает ошибка в деструкторе.

Вызвано исключение по адресу 0x0FB4D9CB (ucrtbased.dll) в MatrixProject.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xDDDDDDCD.

Метод main

Matrix matrix1(3, 3);
matrix1.RFill(10, 20);
Matrix matrix2(3, 3);
matrix2.RFill(10, 20);
matrix1.Add(matrix2);
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++)
        cout << matrix1.arr[i][j] << "\t";
    cout << endl;
}

Подскажите пожалуйста как исправить ошибку, и объясните пожалуйста почему она вообще возникает.

READ ALSO
Вылезла ошибка с4700

Вылезла ошибка с4700

Данная функция должна записывать в строку newText строку checkText без пробеловНо при компиляции вылазит

137
jQuery find по массиву элементов

jQuery find по массиву элементов

Как правильно произвести поиск в массиве элементов?

176
Dokan запрашивает открытие папки как файла

Dokan запрашивает открытие папки как файла

У меня в файловой системе все данные хранятся в ОЗУЯ создал папку, в которую скопировал файл

267