मेरे 2 डी सरणी वर्ग - सी ++, पॉइंटर्स, एक्सेस-उल्लंघन में उल्लंघन का उपयोग करें

जब मैं निम्नलिखित कोड डीबग करता हूं, तो मुझे बताया जाता है कि एक प्रवेश उल्लंघन है। मैंने बदलने की कोशिश की this->arr[i][j] असाइनमेंट ऑपरेटर में *(this->arr[i][j]) लेकिन यह काम नहीं करता क्योंकि मुझे बताया गया था कि यह एक अवैध संकेत था।

हैडर

#ifndef MATRIX_H
#define MATRIX_H
class Matrix
{
public:
Matrix(int rSize=3, int cSize=3);
Matrix(const Matrix& m);
~Matrix();
bool setValue(int rSize, int cSize, int value);
bool getValue(int rVal, int cVal, int& value)const;
Matrix& operator= (const Matrix& m);

private:
int rowSize;
int columnSize;
int** arr;
};

स्रोत

#include<iostream>
#include<cmath>
#include"Matrix.h"
using namespace std;
Matrix::Matrix(int rSize,int cSize)
{
columnSize = cSize;
rowSize = rSize;
arr = new int* [rowSize];
for(int i=0; i<rowSize; i++)
arr[i] = new int[columnSize];
for(int j=0; j<rowSize; j++)
{
for(int k=0; k<columnSize; k++)
arr[j][k] = 0;
}

}
Matrix::Matrix(const Matrix& m)
{
columnSize = m.columnSize;
rowSize = m.rowSize;
arr = new int* [rowSize];
for(int i=0; i<rowSize; i++)
{
arr[i] = new int [columnSize];
}
for(int i=0; i<rowSize; i++)
{
for(int j=0; j<columnSize; j++)
arr[i][j] = m.arr[i][j];
}
}
Matrix::~Matrix()
{
for(int i = 0; i < rowSize; ++i)
delete [] arr[i];
delete [] arr;
}
bool Matrix::setValue(int rVal, int cVal, int value)
{
if((rVal<0)||(cVal<0)||(rVal>rowSize-1)||(cVal>columnSize-1))
return false;
arr[rVal][cVal] = value;
return true;
}
bool Matrix::getValue(int rVal, int cVal, int& value)const
{
if((rVal<0)||(cVal<0)||(rVal>rowSize-1)||(cVal>columnSize-1))
return false;
value = arr[rVal][cVal];
return true;
}
Matrix& Matrix::operator= (const Matrix& m)
{
if(&m == this)
return(*this);
if(((this->rowSize)!= m.rowSize) || ((this->columnSize) != m.columnSize))
{
for(int i=0; i<rowSize; i++)
delete []arr[i];
delete[]arr;
rowSize = m.rowSize;
columnSize = m.columnSize;
arr = new int* [m.rowSize];
for(int r=0; r<rowSize; r++);
}
for(int j=0; j<rowSize; j++)
{
for(int k=0; k<columnSize; k++)
this->arr[j][k] = m.arr[j][k];
}
return(*this);
}

चालक

#include<iostream>
#include"Matrix.h"
using namespace std;
void main()
{
Matrix m(4, 5);
Matrix m2(m);
m2.setValue(1,2,12);
int x;
m2.getValue(1,2,x);
Matrix m3;
m3 = m2;
}

उत्तर:

जवाब के लिए 0 № 1

मैट्रिक्स और मैट्रिक्स :: ऑपरेटर = (कॉन्स मैट्रिक्स और एम)

for(int r=0; r<rowSize; r++);

आप आवंटित करना भूल गए:

arr[r] = new int [columnSize];

संबंधित सवाल
सबसे लोकप्रिय