Stack Overflow на русском Asked by iwacam on November 9, 2020
Не могу понять почему не работают конструктор копирования и деструктор. Отладчик в конструкторе на строчке "_matrixArray[i][j] = other._matrixArray[i][j]" пишет:"Exception thrown: read access violation.
other._matrixArray was 0xCDDDCDDE."
{
public:
MATRIX_API Matrix(size_t sizeOfRows, size_t sizeOfCollumns); //конструктор создающий матрицу с нулевыми элементами
MATRIX_API Matrix(const Matrix& other); //конструктор копирования
MATRIX_API ~Matrix();
//MATRIX_API bool InputArrayFromFile(double** arr, int _sizeOfRows, int _sizeOfCollumns, const char* fileName);
private:
int _sizeOfRows=0;
int _sizeOfCollumns=0;
int** _matrixArray;
};
Matrix::Matrix(size_t sizeOfRows, size_t sizeOfCollumns)
:_sizeOfRows(sizeOfRows), _sizeOfCollumns(sizeOfCollumns)
{
int** _matrixArray = new int*[_sizeOfRows];
for (int i = 0; i < _sizeOfRows; ++i)
_matrixArray[i] = new int[_sizeOfCollumns];
for (int i = 0; i < _sizeOfRows; ++i)
{
for (int j = 0; j < _sizeOfCollumns; ++j)
{
_matrixArray[i][j] = 0;
std::cout << _matrixArray[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << "I am constructor and i am working now!"<<std::endl;
}
Matrix::Matrix(const Matrix& other) //конструктор копирования
:_sizeOfRows(other._sizeOfRows),_sizeOfCollumns(other._sizeOfCollumns)
{
if (other._matrixArray && other._sizeOfRows && other._sizeOfCollumns)
{
_matrixArray = new int*[_sizeOfRows];
for (int i = 0; i < this->_sizeOfRows; ++i)
_matrixArray[i] = new int[_sizeOfCollumns];
for (int i = 0; i < _sizeOfRows; ++i)
{
for (int j = 0; j < _sizeOfCollumns; ++j)
{
_matrixArray[i][j] = other._matrixArray[i][j];
std::cout <<this-> _matrixArray[i][j] << " ";
}
std::cout << std::endl;
}
std::cout << "I am constructor of copy and i am working now!" << std::endl;
}
}
Matrix::~Matrix()//деструктор
{
for (int i = 0; i < this->_sizeOfRows; ++i)
{
delete[] this->_matrixArray[i];
}
delete[] _matrixArray;
}
Знаете, проблема не там. А в конструкторе
Matrix::Matrix(size_t sizeOfRows, size_t sizeOfCollumns)
Хотя в классе определено поле
int** _matrixArray;
в этом конструкторе вы определяете его заново:
Matrix::Matrix(size_t sizeOfRows, size_t sizeOfCollumns)
:_sizeOfRows(sizeOfRows), _sizeOfCollumns(sizeOfCollumns)
{
int** _matrixArray = new int*[_sizeOfRows]; // <------ !!!!!!!!!
for (int i = 0; i < _sizeOfRows; ++i)
Так что вы получаете утечку памяти и не инициализированное корректно поле _matrixArray
в созданном объекте. Понятно, что при копировании такого объекта у вас начинаются сплошные неприятности...
Correct answer by Harry on November 9, 2020
0 Asked on December 30, 2021 by akmaral-islamova
1 Asked on December 30, 2021
0 Asked on December 30, 2021 by alihan-urumov
python tensorflow %d0%bc%d0%b0%d1%88%d0%b8%d0%bd%d0%bd%d0%be%d0%b5 %d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5
1 Asked on December 30, 2021 by mankey_yeeman
1 Asked on December 30, 2021 by zephyrcode
javascript node js postgresql %d0%b1%d0%b0%d0%b7%d0%b0 %d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85
1 Asked on December 30, 2021 by aro-hovhannisyan
c %d0%b8%d1%81%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f
1 Asked on December 30, 2021
1 Asked on December 28, 2021 by bigata
1 Asked on December 28, 2021 by coder8008
windows windows 10 %d0%b4%d0%b8%d1%81%d0%ba %d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2%d0%b0%d1%8f %d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0 %d1%84%d0%b0%d0%b9%d0%bb%d1%8b
3 Asked on December 28, 2021 by user398776
0 Asked on December 28, 2021
0 Asked on December 28, 2021
1 Asked on December 28, 2021
c virtual %d0%ba%d0%bb%d0%b0%d1%81%d1%81%d1%8b %d0%be%d0%be%d0%bf %d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8
1 Asked on December 28, 2021 by hrayr
ios swift uiview %d0%b0%d0%bd%d0%b8%d0%bc%d0%b0%d1%86%d0%b8%d1%8f
Get help from others!
Recent Answers
© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir