gpt4 book ai didi

c++ - 从文件中逐行加载 2D vector 时出现段错误

转载 作者:行者123 更新时间:2023-11-30 04:31:37 26 4
gpt4 key购买 nike

我试图将文件中的每一行加载到二维字符串 vector 中,但我一直遇到段错误。有人可以告诉我出了什么问题吗?提前致谢。

打印 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 元素放入 vector v 之前访问 v[lcount]。执行 v.push_back(vector()) 为该元素提供一个 vector ,然后用以下行填充内部 vector 以上。

请记住,它是 vector 的 vector 。第一个 vector 包含 vector ,但如果它不包含任何 vector ,那么访问它的第 [0] 个元素是未定义的行为,因为您正在访问未初始化的内存。第 [0] 个元素只有在您第一次将一个元素(您的二维 vector )插入其中后才存在。

PS:我认为您在这里不需要二维 vector ,从外观上看,您可以只做一个字符串 vector 。

关于c++ - 从文件中逐行加载 2D vector 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com