一元减去运算符过载C++分段错误
Unary minus operator overload C++ segmentation fault
我有一个对象矩阵,我重载了一元减号运算符,我无法让我的程序工作。如果我将返回类型作为引用,则不允许我返回我在函数中创建的对象,如果我将返回类型作为矩阵,则会出现分段错误。
在 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;
}
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)