我正在尝试阅读矩阵。我看过谷歌,我看到每个人都像我一样做了类似的事情。它编译,但当我介绍第一个位置的值时,它说:分段错误:11。我在Linux和Mac OSX中尝试过这段代码。我得到了同样的错误。
这是我的功能:
我有这个结构:
struct Matri {
string idm; // name of vector
int rows;
int columns;
string id;
vector<vector<int> > matrix;
};
void readMatrix(Matri* m){
cout << "Introduce the name of the matrix" << endl;
cin >> m->idm;
cout << "Introduce number of rows: " << endl;
cin >> m->rows;
cout << "Introduce number of columns: " << endl;
cin >> m->columns;
m->matrix.resize(m->rows*m->columns);
cout << "Size: " << m->matrix.size() << endl;
for (int i = 1; i <= m->rows; i++){
for (int j = 1; j <= m->columns; j++){
cout << "Size of matrix: " << m->matrix.size() << endl;
cout << "Introduce values for position: " << i << ", " << j << endl;
cin >> m->matrix[i][j]; //THIS IS WHAT DOES NOT WORK. It says Segmentation Fault 11.
}
}
}
提前多多感谢!!
答案 0 :(得分:1)
你的循环应该从0到n - 1,而不是从1到n。请参阅this。
答案 1 :(得分:0)
下面
m->matrix.resize(m->rows*m->columns);
你制作了m->rows*m->columns
个向量的向量,每个向量都是空的
您尝试访问这些空向量中的元素会导致崩溃。
你需要这样的东西:
m->matrix.resize(m->rows);
for (auto i = m->matrix.begin(); i != m->matrix.end(); ++i)
{
i->resize(m->columns);
}