私は何とかこのデストラクタの内部に発生する無限の再帰(および最終的なスタックオーバーフロー)を引き起こしています:C++:のostream無限再帰
MyMatrix::~MyMatrix() {
if (this != NULL) {
cout << "Destructor called for " << this->matrix << ":" << endl << *this << endl;
/*for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}*/
delete[] *matrix;
delete[] matrix;
}
}
私は()のループコメントを解除し、初期COUTの端部を削除した場合、関数は正常に動作します。問題はoperator<<
のあなたの宣言であるここ はコンストラクタです
MyMatrix::MyMatrix(int i_m, int i_n) {
m = i_m;
n = i_n;
if (n < 1 || m < 1)
throw string("Dimensions cannot be negative");
matrix = new float*[m];
for (int i = 0; i < m; i++) {
matrix[i] = new float[n];
for (int j = 0; j < n; j++)
matrix[i][j] = 0;
}
}
すべてのコードを投稿してください。 –
'<<'は値によって行列をとります。デストラクタは '<<'を呼び出し、マトリックスのコピーを渡します。そのコピーを破壊する必要があります。デストラクタは '<<'を呼び出し、マトリックスのコピーを渡します。それは破壊する必要があり、デストラクタを呼び出します。これはどこにあるのでしょうか?行く。 –
@ T.C。あなたは '' ''演算子でconst参照を呼び出すべきですが、 'this!= NULL'と'&a!= NULL'も真になり得ないと言います。削除する必要があります。 –