这是我在这里的第一篇文章。由于我是新手,所以这个问题可能很愚蠢。显示以下错误消息时,我正在编写一段代码:
抛出'std::length_error'实例后调用终止
what():基本字串:: _ S_create
/home/gcj/finals/home/gcj/quals中止的地方
以下是有问题的代码,尤其是第39行到第52行。对我来说,这很奇怪,因为此代码块与Line64到Line79几乎相同。
int main(){
std::vector<std::string> dirs, need;
std::string tmp_str;
std::ifstream fp_in("small.in");
std::ofstream fp_out("output");
std::string::iterator iter_substr_begin, iter_substr_end;
std::string slash("/");
int T, N, M;
fp_in>>T;
for (int t = 0; t < T; t++){
std::cout<<" time "<< t << std::endl;
fp_in >> N >> M;
for (int n =0; n<N; n++){
fp_in>>tmp_str;
dirs.push_back(tmp_str);
tmp_str.clear();
}
for (int m=0; m<M; m++){
fp_in>>tmp_str;
need.push_back(tmp_str);
tmp_str.clear();
}
for (std::vector<std::string>::iterator iter = dirs.begin(); iter!=dirs.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(dirs.begin(), dirs.end(), tmp_str2)==dirs.end()) {
dirs.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = dirs.begin(); iter_tmp!= dirs.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
dirs.clear();
std::cout<<std::endl;
std::cout<<" need "<<std::endl;
//processing the next
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!=need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
std::cout<<" where ";
for (std::vector<std::string>::iterator iter = need.begin(); iter!=need.end(); iter++){
for (std::string::iterator iter_str = (*iter).begin()+1; iter_str<(*iter).end(); ++iter_str){
if ((*iter_str)=='/') {
std::string tmp_str2((*iter).begin(), iter_str);
if (find(need.begin(), need.end(), tmp_str2)==need.end()) {
need.push_back(tmp_str2);
}
}
}
}
for (std::vector<std::string>::iterator iter_tmp = need.begin(); iter_tmp!= need.end(); ++iter_tmp)
std::cout<<*iter_tmp<<" ";
need.clear();
std::cout<<std::endl;
//finish processing the next
}
for (std::vector<std::string>::iterator iter= dirs.begin(); iter!=dirs.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
for (std::vector<std::string>::iterator iter= need.begin(); iter!=need.end(); iter++)
std::cout<<*iter<<" ";
std::cout<<std::endl;
fp_out.close();
}
最好的祝福,
标记
最佳答案
您要在dirs
和need
vector 上添加项目,同时对其进行迭代。这是不允许的:如果添加项目需要重新分配,它将使所有现有的迭代器无效,并在您下次访问它们时引起各种错误。
关于c++ - 抛出 'std::length_error'实例后终止调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2892649/