gpt4 book ai didi

c++ - 在抛出 'std::length_error' 实例后调用终止

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:09 25 4
gpt4 key购买 nike

这是我在这里的第一篇文章。由于我是新手,这个问题可能很愚蠢。当显示以下错误消息时,我正在编写一段代码,

在抛出“std::length_error”的实例后调用终止

什么(): basic_string::_S_create

/home/gcj/finals/home/gcj/quals 中止的地方

以下是有问题的代码,尤其是第 39 行到第 52 行。这对我来说很奇怪,因为这段代码几乎与第 64 行到第 79 行相同。

<p></p>

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();


}

最好的问候,标记

最佳答案

您正在向 dirsneed vector 添加项目,同时迭代它们。这是不允许的:如果添加一个项目需要重新分配,它会使所有现有的迭代器失效,并可能在您下次访问它们时导致各种错误。

关于c++ - 在抛出 'std::length_error' 实例后调用终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892649/

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