В простой имплантации класса матрицы я получаю «Место чтения нарушения доступа 0xDDDDDDDD» - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь реализовать простой класс матрицы в cpp, но я получаю эту ошибку

Место чтения нарушения доступа 0xDDDDDDDD

Проблема возникает тольков Visual Studio, в "Clion" это на самом деле работает, но я предпочитаю VS.

мой заголовочный файл выглядит так

.h

#pragma once
#include <iostream>

using namespace std;

class matrix
{
    int row, col;
    int **mat;

public:
    matrix(){}

    matrix(int _row, int _col);

    matrix(const matrix &m);

    ~matrix();

    void mat_pop(int i, int j, int in) {

        this->mat[i][j] = in;
    }

    matrix& operator=(const matrix &) ;

    matrix operator+(const matrix &m) const;

};

.cpp

#include "pch.h"
#include "matrix.h"




matrix::matrix(int _row, int _col):row(_row), col(_col)
{

    mat = new int*[row];
    for (int i = 0; i < row; i++) {

    mat[i] = new int[col]();
    }



 }
matrix::matrix(const matrix & m)
{
    row = m.row;
    col = m.col;
    mat = m.mat;

}

matrix::~matrix()
{
    delete []mat;


}

matrix& matrix::operator=(const matrix &m) 
{

    this->~matrix();
    col = m.col;
    row = m.row;
    construct_matrix(row, col);

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

        for (int j = 0; j < 2; j++) {

            mat[i][j] = m.mat[i][j];

        }

    }


    return *this;

}

matrix matrix::operator+(const matrix &m) const
{

    matrix mat1(row,col);


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

        for (int j = 0; j < col; j++) {

            mat1.mat[i][j]  += mat[i][j] + m.mat[i][j];

        }

    }

    return mat1;
}

и # main

#include "pch.h"
#include <iostream>

using namespace std;

#include "matrix.h"

int main()
{
    matrix a(2, 2), b(2, 2);

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

        for (int j = 0; j < 2; j++) {

            a.mat_pop(i, j, i);
            b.mat_pop(i, j, j);

        }

    }


    //matrix c = a + b;

    matrix c(2, 2);
    c = a + b ;


    return 0;
}

проблема возникает, когда я использую оператор +, если я просто пишу

matrix c = a;

, он работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...