1
我想用一个函数在矩阵中输入特定的值,但由于位于matInit函数中的错误,我一直收到分段错误。无论我将其设置为bar.col [i] .els [k] = 0(如下所示),还是将bar.col [i]保存为数组,然后执行for循环,都会收到此错误k值。我觉得分段错误是由于尺寸不匹配,但我没有看到我做错了什么。我也必须通过这个结构来输入价值,因为这是这个项目的一个要求。如何将文件中的值输入矩阵?
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
struct Vector {
float* els;
int len;
};
struct Matrix {
Vector* col;
int ncols; // total number of columns in matrix
};
// Initializer functions for our structures
Vector vecInit(int); // Provided below
Matrix matInit(int,int); // ** You must complete this
// Overloaded operators
Vector operator+(Vector,Vector); // Provided below
Vector operator*(float,Vector); // ** You must write this
Vector operator*(Matrix,Vector); // ** You must write this
istream& operator>>(istream&, Vector&); // Provided below
istream& operator>>(istream&, Matrix&); // ** You must write this
// Other Vector functions
float vecDot(Vector,Vector); // ** You must write this
// main code
// **** This must be left unchanged in your submission *****
int main(void) {
int m,n,nv,nw;
ifstream fin("mat.def");
if (!fin.is_open()) {
cout << "Cannot find file mat.def!" << endl;
}
else {
// Load details of matrix M from file
fin >> m >> n;
Matrix M = matInit(m,n);
fin >> M;
cout << "M is " << m << "x" << n << endl;
}
return 0;
}
// *****************************************************
// Support function definitions
// ** Provided Code. Do not change **
// Vector structure initializer
// *** Partially provided code. Change as needed below ***
// Matrix structure initializer
Matrix matInit(int m, int n) {
Matrix bar;
bar.ncols = n;
bar.col = new Vector[m];
for (int i=0;i<n;i++) {
for (int k=0;k<m;k++) {
bar.col[i].els[k]=0;
}
}
return bar;
}
istream& operator>>(istream& input, Matrix& M) {
int leng=M.col[0].len;
for (int i=0;i<M.ncols;i++) {
for (int k=0;k<leng;k++) {
input >> M.col[i].els[k];
}
}
return input;
}
由于随机的,杂乱的缩进,显示的代码大部分是不可读的。请清理您的代码并正确缩进,以使其可读和清晰。 –
欢迎来到Stack Overflow。我们要求[最小完整示例](http://stackoverflow.com),而不仅仅是为了我们自己的方便。如果您已将此归结为最小的情况,您可能已经自行发现了这个问题。 – Beta
我的歉意,我会牢记未来 – Crass