我正在尝试将文件中的每一行加载到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;
}
答案 0 :(得分:2)
该行:
v[lcount].push_back(line);
将因为你在将任何向量元素放入向量v之前访问v [lcount]而出现错误。执行v.push_back(vector())以给该元素一个向量,然后用该行填充内向量上方。
记住,它是矢量的矢量。第一个向量包含向量,但如果它不包含任何向量,则访问其第[0]个元素是未定义的行为,因为您正在访问未初始化的内存。第0个元素仅在您第一次将元素(第二个维度向量)推入其中时才存在。
PS:我认为你不需要二维矢量,你可以从它的外观做一个字符串矢量。