迭代stringList容器时出错
Error while iterating stringList container..?
当我通过"m_itFileBuffer" stringlist容器迭代时,我从迭代器获取值时得到一个异常。这行代码在大多数情况下都能正常工作,但只有在某些情况下才会出现异常。在我的代码中,我将"m_itFileBuffer"迭代器设置为不同的值。代码部分如下
所示StringList m_listFileBuffer; //this contains list of CString`s, I read from file and insert into this.
StringList::iterator m_itFileBuffer;
....
....
....
....
....
{
bool notEmpty = (m_itFileBuffer != m_MylistFileBuffer.end());
if (notEmpty)
{
m_strLine = static_cast<CString>(*m_itFileBuffer);//Here i get exception
++m_itFileBuffer;
}
}
下面是我在输出窗口中得到的异常:
Severity: Critical Error (10 - 'System Crit.'), Returncode: 0x80040835, Error No.: 0 (access violation)
Description: C system exception code: C0000005
任何帮助,为什么我得到这个异常?还有,如何重置迭代器?
我假设StringList实际上是:
typedef std::list<CString> StringList;
也许你应该考虑使用std::string代替CString。
现在来看遍历列表。你用来迭代的代码在我看来很奇怪。这样做会更简单:
for (StringList::/*const_*/iterator it=m_listFileBuffer.begin(); it != m_listFileBuffer.end(); ++it)
{
/*const*/ CString& strLine = *it; //no need for static cast
std::cout << (LPCTSTR) strLine << std::endl;
}
如果你有Visual Studio 2010(包含一些c++实现的东西),你可以使用auto:
来编写更简洁的循环。for (auto it = begin(m_listFileBuffer); it != end(m_listFileBuffer); ++it)
{
/*const*/ CString& strLine = *it; //no need for static cast
std::cout << (LPCTSTR) strLine << std::endl;
}
编辑:
使用完整的c++ 11支持,只需编写
for (/*const*/ auto& strLine : m_listFileBuffer)
std::cout << (LPCTSTR) strLine << std::endl;
编辑:ds27680:
请参阅注释…
回答你关于崩溃的问题,这可能是由于各种原因造成的。我将列举一些最明显的例子:
- 迭代器在一个列表的起始位置初始化,但在另一个列表的末尾进行检查。比较来自不同容器的迭代器是个坏主意
- 您正在对列表执行操作(在相同或另一个线程中),该操作使迭代器无效,但您随后使用它。即m_listFileBuffer.erase (it);
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- 迭代stringList容器时出错