从文件逐行加载2D矢量时出现分割错误
Segmentation fault when loading 2D vector line by line from file
我试图将每一行从文件加载到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:我不认为你需要一个二维的向量,你可以做一个字符串的向量从它的外观
相关文章:
- C++映射分割错误(核心转储)
- 由cin中的字符串中未捕获空白引起的分割错误
- 删除映射和分割错误中的一个过去结束元素
- 在指向函数中读取变量时出现分割错误
- 在链表中的第 n 位插入显示分割错误
- 较高值 n 的分割错误(例如 n=999997)
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 分割错误:向量中的擦除功能
- 向量向量的分割错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 集合布局上的 Qt 分割错误
- 高达20亿的筛子会产生分割错误
- 对向量使用推回函数时的分割错误
- 绘制精灵会导致分割错误
- 将矢量的整数内容打印为字符串会导致分割错误
- 分割错误:使用向量时为 11 c++
- 结构的分割错误错误