我遇到以下代码段的问题。
它与stringstream“stringstream css(cv.back())”位有关。如果它被注释掉,程序将运行正常。
这真的很奇怪,因为我一直在我的一些程序中得到它,但如果我只是创建一个控制台项目,代码将运行正常。在我的一些Win32程序中它将会在某些程序中它将不会(然后它将返回“vector iterator not dereferencable”但它会编译得很好)。
任何想法都会非常感激。谢谢!
vector<double> cRes(2);
vector<double> pRes(2);
int readTimeVects2(vector<double> &cRes, vector<double> &pRes){
string segments;
vector<string> cv, pv, chv, phv;
ifstream cin("cm.txt");
ifstream pin("pw.txt");
ifstream chin("hm.txt");
ifstream phin("hw.txt");
while (getline(cin,segments,'\t')) {
cv.push_back(segments);
}
while (getline(pin,segments,'\t')) {
pv.push_back(segments);
}
while (getline(chin,segments,'\t')) {
chv.push_back(segments);
}
while (getline(phin,segments,'\t')) {
phv.push_back(segments);
}
cin.close();
pin.close();
chin.close();
phin.close();
stringstream phss(phv.front());
phss >> pRes[0];
phss.clear();
stringstream chss(chv.front());
chss >> cRes[0];
chss.clear();
stringstream pss(pv.back());
pss >> pRes[1];
pss.clear();
stringstream css(cv.back());
css >> cRes[1];
css.clear();
return 0;
}
答案 0 :(得分:1)
这里有两个主要问题。这些问题中的任何一个或两个都可能导致您遇到的问题。
您隐藏了范围之外的名称:
vector<double> cRes(2);
vector<double> pRes(2);
int readTimeVects2(vector<double> &cRes, vector<double> &pRes){
cRes和pR将成为传递给函数的变量,而不是您演示的全局变量。
在我们能够诊断出这个问题之前,你需要向我们展示出问题的调用代码 - 虽然我想知道为什么你不只是在这里使用push_back,
这里还有另一个问题:
stringstream phss(phv.front());
stringstream chss(chv.front());
stringstream pss(pv.back());
stringstream css(cv.back());
您没有检查确保phv,chv,pv和cv不为空。上面的std::getline
完全有可能导致无法成功完成的问题,而且你传递的文件也完全可能是空的。