二维向量上的分割故障

时间:2016-10-19 20:28:21

标签: c++11 vector segmentation-fault

我有一个包含表格格式值的文件。文件中的行数和列数可能会有所不同。

33829731.00 -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00
205282038.00    -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00
3021548.00  -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00
203294496.00    -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00
205420417.00    -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00   -1.00

我正在使用二维向量来使用以下代码存储数据。

ifstream inputCent("file.txt");

std::vector<std::vector<double> > C;
std::vector<double> col(15);

while(!inputCent.eof())
{
    for(int i = 0; i < col.size(); i++)
    {
        inputCent >> col[i];
        C[i].push_back(col[i]);
    }
}

但是这给了我Segmentation fault: 11。但是,如果我像这样初始化std::vector<std::vector<double> > C(15);那么它适用于15行。但正如我所说,行数可能会有所不同。为什么我必须初始化C的大小?或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

您正在尝试push_back到可能不存在的向量...正确的代码如下:

ifstream inputCent("file.txt");

std::vector<std::vector<double> > C;
std::vector<double> col(15);

while(!inputCent.eof())
{
    for(int i = 0; i < col.size(); i++)
    {
        inputCent >> col[i];  
    }
    C.push_back(col);
}

如上所示,在将整个 col向量推送到col的后面之前,使用值填充C向量更有意义。< / p>