Hallo,
Die IDE ist Microsoft Visual C++ 2010 Express.
Ich habe eine Klasse, welche über ein 2 dimensionales array verfügt:
double matrix_ [COLOM] [ROW];
Wenn ich versuche das array zu löschen bekomme ich jedoch immer wieder Laufzeitfehler. COLOM und ROW sind immer 2 btw.
Versuch 1:
delete (double *) matrix_[0];
delete (double *) matrix_[1];
delete matrix_;
Versuch 2:
delete [] matrix_[0]; // Wirft compiler Warning warning C4154: Löschen eines Arrayausdrucks; Konvertierung in Zeiger
// warning C4156: Löschen eines Arrayausdrucks ohne Verwendung der Arrayform von 'delete'. Arrayform wird automatisch verwendet.
delete [] matrix_[1];
delete matrix_;
Versuch 3:
delete (double *) [] matrix_[0];
delete (double *) [] matrix_[1];
delete matrix_;
So einen Runtimefehler bekomme ich:
Ich habe auch die Zeile "delete matrix_;" weggelassen und die verschiedenen Methoden probiert. Versuch 2 sollte laut diversen Foren eignelich funktionieren.
Anbei die Klasse:
#include <iostream>
#define COLOM 2
#define ROW 2
using namespace std;
class Matrix
{
public:
Matrix( double (*matrix)[ROW]);
Matrix (const Matrix& m);
~Matrix ();
double det(void);
bool isSingular(void);
void print(void);
private:
double matrix_ [COLOM] [ROW];
int matrixSize_;
};
Matrix::~Matrix()
{
cout << "\nDestructor: " << matrix_ << "\n";
//delete [] matrix_;
delete [](double *) matrix_[0];
delete [](double *) matrix_[1];
//delete matrix_;
//delete [] matrix_;
};
Matrix::Matrix( double (*matrix)[ROW] =0) : matrixSize_(sizeof(double) * COLOM * ROW)
{
double tmpMatrix [COLOM][ROW] = {{0,0}, {0,0}};
if (matrix == 0)
{
memcpy(matrix_, tmpMatrix, matrixSize_);
}
else
{
memcpy(matrix_, matrix, matrixSize_);
}
}
Matrix::Matrix(const Matrix& m) : matrixSize_(m.matrixSize_)
{
memcpy (matrix_, m.matrix_, matrixSize_);
}
bool Matrix::isSingular(void)
{
return (det() == 0);
}
double Matrix::det(void)
{
return (matrix_[0][0]*matrix_[1][1] - matrix_[1][0]*matrix_[0][1]);
//DET = ad-bc
}
void Matrix::print(void)
{
for (int i=0; i < ROW; i++)
{
cout << "Row " << i << " : ";
for (int j=0; j < COLOM; j++)
{
cout << matrix_[j][i] << " ";
}
cout << "\n";
}
}
Alles anzeigen
Vielen Dank für jede Hilfe im Vorhinein.