C++ 评估字符串列表的迭代器向量时出现分段错误

C++ 评估字符串列表的迭代器向量时出现分段错误,c++,vector,iterator,C++,Vector,Iterator,尝试访问字符串列表的迭代器向量中的值时出错。这是一段复杂代码的一部分,因此我将尝试在这里仅介绍相关部分。 我搜索过与我类似的问题,但我不知道问题是什么 这些是我的变量的声明 /// Vector of lists of files std::vector <std::list <std::string> > filelist; /// Vector with iterator for the list of files std::vector <std::list

尝试访问字符串列表的迭代器向量中的值时出错。这是一段复杂代码的一部分,因此我将尝试在这里仅介绍相关部分。 我搜索过与我类似的问题,但我不知道问题是什么

这些是我的变量的声明

/// Vector of lists of files
std::vector <std::list <std::string> > filelist;

/// Vector with iterator for the list of files
std::vector <std::list <std::string>::iterator  > iterator;
在这里,我尝试访问迭代器指向的字符串值,出现seg错误:

std::string path=*(iterator.at(i));
是否有其他方法访问迭代器所指向的内容? 如果字符串为空,是否有问题


希望您能帮助我。

似乎有些列表是空的,而应用解引用操作符begin()会导致分段错误。

您能给我们展示一个最小的工作(可编译)代码来重现您的问题吗?这个错误几乎肯定存在于您认为不相关的代码中。如果很难分离出一个最小的完整示例,这就是代码过度耦合的有力证据。我的第一个怀疑是,您存储的迭代器已经无效。如果从列表中删除它引用的特定元素,或者以任何方式修改
filelist
,都可能发生这种情况;在两个不同的时刻,在这两个时刻之间,我会调用iterator.push_(filelist.at(I.begin())。第二次在列表上推回时,所有内容都将重新分配,使第一个迭代器指针指向旧的内存点。@如果没有使用的函数保留,Edien通常推回会导致重新分配内存。
std::string path=*(iterator.at(i));