Matrix &Matrix::operator*(Matrix &rhs) {
if (this->columns != rhs.rows) {
this->~Matrix();
return *this;
}
else {
Matrix product(this->rows, rhs.columns);
/*for (unsigned int col = 0; col < product.columns; col++) {
for (unsigned int row = 0; row < product.rows; row++) {
unsigned int val = 0;
for (unsigned int i = 0; i < this->columns; i++) {
val += this->get(row, i)*rhs.get(i, col);
}
product.set(row, col, val);
}
}*/
return product;
}
コードはビルドされますが、実行中にクラッシュします。デバッグするとき私はエラーがコピーコンストラクタ(this->matrix = new double[rows*columns];
)にあるというメッセージことを得るC++プログラムは正常にビルドされますが、実行時にエラーが発生します
Matrix::Matrix(const Matrix&m):rows(m.rows),columns(m.columns),matrix(nullptr) {
if (!m.isValid()) {
return;
}
this->matrix = new double[rows*columns];
for (unsigned int i = 0; i < rows*columns; i++) {
matrix[i] = m.matrix[i];
}
}
私はなぜ理解していませんか?コピーコンストラクタは、*
演算子を実装する直前に動作していました。私は本物のエラーを見つけるために一枚ずつコメントしました。返品のためにプログラムがクラッシュするようです。ステートメント。そして、私はfor-loopsをコメントアウトしたので、問題はありません。
メインから私のテストは単純です:
#include "Source.h"
#include "Matrix.h"
#include<iostream>
int main() {
Matrix A(3,3);
Matrix B(3);
cout << B << endl;
cout << A << endl;
Matrix C=A*B;
cout << C << endl;
return 0;
}
私は本当にこだわっていますので、私は、誰も私を助けることができると思います。ここ は、プログラム全体へのリンクです:
プログラムはちょうどそれが構文的に有効であることを意味しコンパイルされること。これは、実行しているときに動作を定義しているかどうか、または結果を生成するために何も意味しません。ただのメモ。 –
あなたの*演算子の*ローカル一時変数*に*参照*を返すのに役立つわけではありません。それがUBです。 – kfsone
[MCVE]を入力してください。また 'this->〜Matrix();'は非常に間違っているようです。 – Barry