我遇到了这个奇怪的问题:当我的程序达到这个方法时:
//Returns the transpose matrix of this one
RegMatrix RegMatrix::transpose() const{
RegMatrix result(numCol,numRow);
int i,j;
for(i=0;i<numRow;++i)
for(j=0;j<numCol;++j){
result._matrix[j][i] = _matrix[i][j];
}
return result;
}
它突然崩溃了......
当我使用我的VS调试器运行它时,它看起来一切正常,新矩阵填充了相关值,直到行return result;
从某个神秘的原因返回一个空矩阵向量。
我哪里出错?
以下是我对复制构造函数的实现:
//CCtor of RegMatrix
RegMatrix::RegMatrix(const RegMatrix &other): numRow(other.getRow()), numCol(other.getCol()){
//Create
_matrix = vector<vector<MyDouble> >(other.getRow());
int i,j;
for(i=0; i < numRow; i++)
_matrix[i] = vector<MyDouble>(other.getCol());
//Copy Matrix
for(i=0;i<numRow; ++i){
for(j=0;j<numCol; ++j){
_matrix[i][j] = other._matrix[i][j];
}
}
}
我的赋值运算符实现:
//RegMatrix = RegMatrix
RegMatrix& RegMatrix::operator=(const RegMatrix rhs){
assert(numRow == rhs.getRow() && numCol == rhs.getCol());
if(*this != rhs){
int i,j;
for(i=0;i<numRow;++i)
for(j=0;j<numCol;++j){
_matrix[i][j] = rhs._matrix[i][j];
}
}
return *this;
}
答案 0 :(得分:0)
您将按值返回矩阵。复制构造函数涉及到。你的拷贝构造函数是如何定义的?
答案 1 :(得分:0)
假设MyDouble有一个正确的拷贝构造函数,你应该能够将你的拷贝构造函数减少到这个:
RegMatrix::RegMatrix(const RegMatrix &other):numRow(other.getRow()), numCol(other.getCol()),
_matrix(other._matrix)
{ }
看看会给你带来什么。
编辑: 如果列和行不相等,则赋值运算符可能会出现问题。你在那个实例中抛出了一个断言,所以程序就要中止了。那是你要的吗?您是否宁愿更改分配和行以匹配新值?如果是这样,你可以这样做:
RegMatrix & RegMatrix::operator=(const RegMatrix & rhs) {
if(this == &rhs)
return *this;
numRow = rhs.getRow();
numCol = rhs.getCol();
_matrix = rhs._matrix;
return *this;
}