我正在迭代包含单词作为键的地图,并且每个单词都有一堆数字分配存储在vector<int>
中,表明它们在哪一行找到。我无法在.txt文件中输出该信息。
文件中出现足够的垃圾后,程序崩溃了。
经过一些简短的测试后,我发现错误发生在显而易见的地方,即将最终信息输出到.txt文件时。
经过一些谷歌搜索后,唯一相关的信息片段是有人简单地说不应该在循环中使用ofstream。我猜它可能会以某种方式导致溢出?什么东西没有被冲洗呢?
出了什么问题,为什么?我该如何解决这个问题?
//FINAL OUTPUT TO A FILE, CREATING A NEW .txt FILE
ofstream filehandle;
filehandle.open("result.txt",ios::out);
if( filehandle.is_open() )
{
for(map<string, vector<int> >::const_iterator a = line_num_by_word.begin();a!=line_num_by_word.end();++a)
{
filehandle << "The word " << "\"" << a->first << "\"" << " is present on: \n";
vector<int>::const_iterator int_vec_c_it = a->second.begin();
while( int_vec_c_it != a->second.end() )
{
vector<int>::const_iterator in_front_of_it = int_vec_c_it+1;
//count the number of times
int counter = 1;
while( *(int_vec_c_it)==*(in_front_of_it) )
{
++counter;
++in_front_of_it;
}
filehandle << " line " << *(int_vec_c_it) << "-" << counter << " times ";
int_vec_c_it = in_front_of_it;
}
filehandle << "\n";
}
}else cout << "no output" <<endl;
答案 0 :(得分:1)
当a-&gt; second()在end()之前为1时,it_front_of_it为end()。然后你在你的时间里取消引用它。
while( *(int_vec_c_it)==*(in_front_of_it) )