一元减去运算符过载C++分段错误

Unary minus operator overload C++ segmentation fault

本文关键字:C++ 分段 错误 运算符 一元      更新时间:2023-10-16

我有一个对象矩阵,我重载了一元减号运算符,我无法让我的程序工作。如果我将返回类型作为引用,则不允许我返回我在函数中创建的对象,如果我将返回类型作为矩阵,则会出现分段错误。

在 H 文件中:

Matrix operator - () const; 

在 cpp 文件中:

Matrix Matrix::operator - () const
{
  if (isValid==false)//just a validity check
    return *this;
  Matrix mat(*this);//copy ctor
  for (int i=0;i<row;i++)
       for (int j=0;j<col;j++)
          mat.matrix[i][j]=-matrix[i][j];
  return mat;
}

我尝试了许多排列(添加 const,通过引用添加),但似乎没有任何效果。我该如何解决这个问题?

下面的内容没有任何分段错误。 您应该通过删除任何不必要的内容来最小化代码,然后将其逐渐转换为下面的代码,并查看您的分段错误在哪个阶段消失。

#include <iostream>
#include <vector>
using namespace std;
class Matrix {
public:
    Matrix() : isValid(true), row(0), col(0) {}
    Matrix(int r, int c, int val);
    Matrix(const Matrix&);
    Matrix operator - () const; 
private:
    bool isValid;
    int row, col;
    vector<vector<int> > matrix;
};
Matrix::Matrix(int r, int c, int val) : isValid(true), row(r), col(c) {
    matrix.resize(r);
    for (int i=0; i<r; i++)
        matrix[i].resize(c, val);
}
Matrix::Matrix(const Matrix& m) : isValid(true), row(m.row), col(m.col), matrix(m.matrix) {}
Matrix Matrix::operator - () const
{
  if (isValid==false)//just a validity check
    return *this;
  Matrix mat(*this);//copy ctor
  for (int i=0;i<row;i++)
       for (int j=0;j<col;j++)
          mat.matrix[i][j]=-matrix[i][j];
  return mat;
}
main() {
    int r=10, c=5;
    Matrix m(r, c, 1);
    Matrix m1;
    m1 = -m;
}