Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复制构造函数在被调用时抛出std::bad_alloc 我是新的C++程序员。我想用动态编程在C++中创建一个矩阵类。我的复制构造函数有问题。当我调用运算符+将其用于矩阵加法时,复制构造函数抛出一个错误的\u alloc-Exception。当我尝试创建新的动态内存时,复制构造函数中出现了问题,我可以在其中复制数据: 矩阵=新整数[大小]; 我不明白为什么。 以下是全部代码:(仅cpp文件) #包括 #包括“Matrix.hpp” 矩阵::矩阵(int m,int n){ 材料排=m; mat_col=n; 矩阵=新整数[矩阵行*矩阵列]; //初始化 对于(int i=0;i_C++_Pass By Reference_Copy Constructor - Fatal编程技术网

复制构造函数在被调用时抛出std::bad_alloc 我是新的C++程序员。我想用动态编程在C++中创建一个矩阵类。我的复制构造函数有问题。当我调用运算符+将其用于矩阵加法时,复制构造函数抛出一个错误的\u alloc-Exception。当我尝试创建新的动态内存时,复制构造函数中出现了问题,我可以在其中复制数据: 矩阵=新整数[大小]; 我不明白为什么。 以下是全部代码:(仅cpp文件) #包括 #包括“Matrix.hpp” 矩阵::矩阵(int m,int n){ 材料排=m; mat_col=n; 矩阵=新整数[矩阵行*矩阵列]; //初始化 对于(int i=0;i

复制构造函数在被调用时抛出std::bad_alloc 我是新的C++程序员。我想用动态编程在C++中创建一个矩阵类。我的复制构造函数有问题。当我调用运算符+将其用于矩阵加法时,复制构造函数抛出一个错误的\u alloc-Exception。当我尝试创建新的动态内存时,复制构造函数中出现了问题,我可以在其中复制数据: 矩阵=新整数[大小]; 我不明白为什么。 以下是全部代码:(仅cpp文件) #包括 #包括“Matrix.hpp” 矩阵::矩阵(int m,int n){ 材料排=m; mat_col=n; 矩阵=新整数[矩阵行*矩阵列]; //初始化 对于(int i=0;i,c++,pass-by-reference,copy-constructor,C++,Pass By Reference,Copy Constructor,我注意到的第一件事是,在复制构造函数中,mat_row和mat_col没有初始化。它们应该从要复制的对象中的值中设置,然后再将它们相乘以生成大小。如果不先这样做,则现有值未定义,很可能是非常大的值,导致新事物注定要失败 //copy-Constructor Matrix::Matrix(const Matrix& mat){ mat_row = mat.mat_row; mat_col = mat.mat_col; int size=mat_row

我注意到的第一件事是,在复制构造函数中,mat_row和mat_col没有初始化。它们应该从要复制的对象中的值中设置,然后再将它们相乘以生成大小。如果不先这样做,则现有值未定义,很可能是非常大的值,导致新事物注定要失败

//copy-Constructor
  Matrix::Matrix(const Matrix& mat){
      mat_row = mat.mat_row;
      mat_col = mat.mat_col;
      int size=mat_row*mat_col;
      matrix= new int [size];
      for(int i=0;i<size;i++){
          matrix[i]=mat.matrix[i];
      }
    }
//复制构造函数
矩阵::矩阵(常数矩阵和矩阵){
mat_行=mat.mat_行;
mat_col=mat.mat_col;
int size=材料行*材料列;
矩阵=新整数[大小];

对于(int i=0;iOperator+原型应该是
矩阵运算符+(常数矩阵和左、常数矩阵和右)
No,在这种情况下不应该。在这种情况下,它应该是
矩阵运算符+(常数矩阵和右)
因为它是一个成员函数。如果OP为operator+包含了一个friend函数,那么您的签名将是正确的。为什么
新建
?您应该使用模板并将值存储在
矩阵
对象中。我初始化了它们,但仍然存在问题。存在分段错误的问题。当mat1+mat2执行时,将调用coy构造函数。然后复制构造函数尝试动态分配一个新内存部分。此时出现分段错误。当分配失败时,new上会出现异常。这通常表明分配的大小不合适。我刚刚运行了您的代码,似乎只要你按照我在回答中的建议,对复制构造函数和赋值运算符进行修复。非常感谢。它现在可以工作了:::))。我像你说的那样通过常量引用传递矩阵。然后我更改了方法get(I,j)到一个常量方法。现在它工作了。但是为什么分配失败,当我们通过值传递时。为什么复制构造函数创建的副本会导致分段错误。因为当你通过值传递时,你创建了一个调用复制构造函数的对象的临时副本,而该副本并没有为新对象提供有效的大小。当你通过引用传递时,你通过复制构造函数。
//copy-Constructor
  Matrix::Matrix(const Matrix& mat){
      mat_row = mat.mat_row;
      mat_col = mat.mat_col;
      int size=mat_row*mat_col;
      matrix= new int [size];
      for(int i=0;i<size;i++){
          matrix[i]=mat.matrix[i];
      }
    }