Ошибка сегментации при загрузке 2D вектора построчно из файла - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь загрузить каждую строку из файла в двухмерный вектор строки, но у меня продолжает появляться ошибка сегментации Может кто-нибудь показать мне, что идет не так? Заранее спасибо.

Печать lcount была всего лишь способом проверки загрузки всех строк (190 тыс. Строк).

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

int loadVector(ifstream& fh, vector< vector<string> >& v);

int main(int argc, char *argv[])
{
   ifstream fh1(argv[1]);
   ifstream fh2(argv[2]);

   vector< vector<string> > v1;
   vector< vector<string> > v2;

   int v1_lines = loadVector(fh1, v1);
   int v2_lines = loadVector(fh2, v2);

   cout << "v1: " << v1_lines << "\n";
   cout << "v2: " << v2_lines << "\n";
}

int loadVector(ifstream& fh, vector< vector<string> >& v){
   int lcount = 0;
   while (fh.good() && fh){
      string line = "";
      getline(fh, line);
      v[lcount].push_back(line);
      ++lcount;
   }
   fh.close();
   return lcount+1;
}

1 Ответ

2 голосов
/ 14 ноября 2011

Строка:

 v[lcount].push_back(line);

вызовет ошибку, потому что вы обращаетесь к v [lcount] перед помещением любых векторных элементов в вектор v. Выполните v.push_back (vector ()), чтобы дать этому элементувектор, а затем заполните внутренний вектор линией выше.

Помните, что это вектор векторов.Первый вектор содержит векторы, но если он еще не содержит их, то доступ к его [0] -ому элементу является неопределенным поведением, потому что вы обращаетесь к неинициализированной памяти.[0] -й элемент существует только после того, как вы в первый раз вставили в него элемент (ваш вектор 2-го измерения).

PS: я не думаю, что вам нужен 2-й векторздесь вы можете просто сделать вектор строк из вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...