I'm writing a program which creates 2D Dynamic Array in the constructor and delete it in the destructor. But when I return an object of this class from any function, it causes Runtime Error.
Error: Access violation reading location 0xDDDDDDD1
#include <iostream>
#include <cstdlib>
using namespace std;
class Matrix {
private:
int **MyArray;
int row, col;
public:
Matrix(int r, int c) {
MyArray = new int*[r];
for (int i = 0; i < r; i++) {
MyArray[i] = new int[c];
}
row = r;
col = c;
}
Matrix test() {
Matrix Temp(row, col);
return Temp;
}
~Matrix() {
for (int i = 0; i < row; i++) {
delete[] MyArray[i];
}
delete[] MyArray;
}
};
int main() {
Matrix m(2, 2), m2(2, 2);
m.test();
system("pause");
}
While tracking down the error I come across that after deleting Temp object. The program also deletes another location.
#include <iostream>
using namespace std;
class Matrix {
private:
int **MyArray;
int row, col;
static int count;
public:
Matrix(int r, int c) {
MyArray = new int*[r];
for (int i = 0; i < r; i++)
MyArray[i] = new int[c];
row = r;
col = c;
}
Matrix test() {
Matrix Temp(row, col);
cout << "Temp->" << &Temp << endl;
return Temp;
}
~Matrix()
{
cout << "deleting-> " << this << endl;
for (int l = 0; l < row; l++)
delete[] MyArray[l];
delete[] MyArray;
}
};
void main() {
Matrix m(2, 2), m2(2, 2);
cout << "m->" << &m << endl;
cout << "m2->" << &m2 << endl;
m.test();
}