阅读矩阵 - 分段错误

时间:2014-03-01 21:41:30

标签: c++ matrix

我正在尝试阅读矩阵。我看过谷歌,我看到每个人都像我一样做了类似的事情。它编译,但当我介绍第一个位置的值时,它说:分段错误: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.
        }
    }
}

提前多多感谢!!

2 个答案:

答案 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);
}