gpt4 book ai didi

C++:在重载 ostream 时引用 2D 数组元素时崩溃 >>

转载 作者:行者123 更新时间:2023-11-28 02:37:50 30 4
gpt4 key购买 nike

我正在尝试使用动态分配的内存创建一个包含二维数组的 Matrix 类。

class Matrix{
int sized;
Complex **matrix = NULL;
public:
Matrix(int);
Matrix(int, vector<Complex>);
Matrix();
bool checkDom(Matrix, Matrix);
int size();
void size(unsigned int);

这是我的 Matrix 构造函数,它将 Complex 类型的值复制到每个元素中。

Matrix::Matrix(int sizer, vector<Complex> inputList) {

sized = sizer;

//Init all to 0+0i
Complex** matrix = new Complex*[sizer];
for (int i = 0; i < sizer; ++i)
matrix[i] = new Complex[sizer];

int count = 0;

//Copy vector values into matrix
for (int i = 0; i < sized; i++) {
for (int j = 0; j < sized; j++) {
matrix[i][j] = inputList[count];
count++;
}
}

如果我在此构造函数中插入 cout 语句,矩阵元素将正确打印:

//inside of constructor, prints all elements without a problem
for (int i = 0; i < sized; i++) {
for (int j = 0; j < sized; j++) {
os << right << setw(6) << matrix[i][j];
}
os << endl;
}

但是,当运算符重载 >> 运算符以打印矩阵时,它会崩溃(编译时没有错误)。

friend ostream &operator<<(ostream &os, Matrix &matprint){
for (int i = 0; i < matprint.sized; i++) {
for (int j = 0; j < matprint.sized; j++) {
os << right << setw(6) << matprint.matrix[i][j];
}
os << endl;
}
return os;
}

每当我想使用点符号将矩阵元素发送到输出流时,它似乎就会发生。我得到错误

ConsoleApplication7.exe 中 0x000E8943 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。

我的调试器还将 matprint.matrix 值列为 0x00000000。我很难弄清楚我的引用文献到底哪里出了问题!谢谢!

这是调用运算符的地方,在 main 中:

Matrix  mat2(2, mat_vals);
cout << mat2;

最佳答案

这一行:

Complex** matrix = new Complex*[sizer];

正在声明一个名为 matrix 的新对象,该对象在构造函数的范围内是本地的。它的名字隐藏同名的数据成员。因此,当您在运算符函数中对其进行推导时,您将推导其值未从 NULL 更改的数据成员,因此会发生崩溃。

拿走类型然后它变成一个赋值:

matrix = new Complex*[sizer];

关于C++:在重载 ostream 时引用 2D 数组元素时崩溃 >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938082/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com