저는 복사 생성자로 소멸자를 사용하는 개념에 정말로 고심하고 있습니다. 소멸자를 사용하지 않으면 코드가 자동으로 작동하므로 잘 작동합니다. 만약 그렇다면 'Debug Assertion Failed!'라는 오류 메시지가 나타납니다. 및 '표현식 : _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse).소멸자가 프로그램을 크래시시킵니다.
하지만 소멸자 사용법을 이해하고 싶습니다. 아래에 코드가 있습니다. 내가 잘못했거나해야 할 일을 설명하는 데 도움을 주셔서 감사합니다!
클래스 매트릭스 {복사 - 생성자에서
private:
int M;
int N;
double *data;
public:
Matrix();
int getM() const { return M; }
int getN() const { return N; }
//CONSTRUCTOR
Matrix(int sizeR, int sizeC,double * input_data)
{
M = sizeR; //Rows
N = sizeC; //Columns
data = new double[M*N]; //creation of 1D array, uses m&n values
cout << "\nMatrix::Matrix(int sizeR, int sizeC, double * data_value) is invoked...\n\n";
//ENTER DATA INTO MATRIX HERE:
for(int i=0; i < M*N; i++) //Loops for every data entry into 1D array, uses r&c as referenece to
data[i] = input_data[i];//Accesses each value at specific location, inputs value 'val'
for(int i = 0; i < M*N; i++) //Loops for every data entry into 1D array, uses r&c as referenece to size
cout << data[i] << " ";
}
//get function uses row and column from user
double get(int i, int j)
{
return data[i*N+j];
}
double set(int i, int j, double val)
{
data[i*N+j] = val;
cout << "\n\nNEW MATRIX: ";
for(int i = 0; i < M*N; i++)//Loops for every data entry into 1D array, uses r&c as referenece to size
cout << data[i] << " ";
return val;
}
Matrix(const Matrix& oldMatrix)
{
cout¸<< "\nMatrix::Matrix(const Matrix&) is invoked....";
M = oldMatrix.getM();
N = oldMatrix.getN();
data = oldMatrix.data;
cout << "\n\n";
//ENTER DATA INTO MATRIX HERE:
for(int i = 0; i < M*N; i++)//Loops for every data entry into 1D array, uses r&c as referenece to size
cout << data[i] << " ";
}
//DESTRUCTOR
~Matrix()
{
//delete data
delete [] data;
data = NULL;
cout << "\n\nMatrix::~Matrix() is invoked...\n\n";
}
};
int main()
{
int sizeR, sizeC;
double val;
cout << "Enter No. Rows: ";
cin >> sizeR;
cout << "Enter No. Columns: ";
cin >> sizeC;
double * input_data;
input_data = new double[sizeR*sizeC];
//INPUTS VALUES TO ARRAY
for(int i = 0; i < sizeR*sizeC; i++)//Loops for every row
input_data[i] = i;
Matrix M1(sizeR, sizeC, input_data);
cout << "Enter row that value you are after is in: ";
cin >> sizeR;
cout << " & now the column that it is in: ";
cin >> sizeC;
cout << "Change value: " << M1.get(sizeR, sizeC) << " to:";
cin >> val;
M1.set(sizeR, sizeC, val);
//calls copy constructor
M1 = Matrix(M1);
}
'new []'가 몇 번이나 호출 되었습니까? 'delete []'가 몇 번 호출 되는가? –
copy-constructor에서'data = oldMatrix.data1'을 설정하면 매우 의심스러워 보입니다 !!! –
참고 자료, 그것은 * deconstructor *가 아니라 * 소멸자 *입니다. 나는 또한 당신의 코드를 들여 쓰고 엉성하게 만들었다. 공백을 두려워하지 마십시오. – jrok