2016-10-19 11 views
0

У меня есть файл, который содержит значения в формате таблицы. Количество строк и столбцов в файле может отличаться.Ошибка сегментации на двумерном векторе

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? Или что я делаю неправильно?

ответ

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.

+0

Получил, спасибо. :) Глупая ошибка. –

Смежные вопросы