从文件逐行加载2D矢量时出现分割错误

Segmentation fault when loading 2D vector line by line from file

本文关键字:分割 错误 文件 逐行 加载 2D      更新时间:2023-10-16

我试图将每一行从文件加载到2D字符串向量,但我一直得到分割错误。谁能告诉我出了什么问题吗?提前谢谢。

打印lcount只是一种验证是否加载了所有行(190k行)的方法。

#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;
}

一行:

 v[lcount].push_back(line);

将出现错误,因为在将任何向量元素放入vector v之前访问了v[lcount]。执行v.push_back(vector())给该元素一个向量,然后用上面的行填充内部向量。

记住,它是向量的向量。第一个向量包含向量,但如果它还没有包含任何向量,那么访问它的[0]元素是未定义的行为,因为你访问的是未初始化的内存。第[0]个元素只有在第一次将一个元素(你的第二维向量)压入后才存在。

PS:我不认为你需要一个二维的向量,你可以做一个字符串的向量从它的外观