mardi 2 juin 2015

Runtime Error in returning class object from function [duplicate]

This question already has an answer here:

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();
}

Tracking Error

Aucun commentaire:

Enregistrer un commentaire