c ++ debug assertion failed:map / set iterator not dereferencable

时间:2013-06-27 20:40:45

标签: c++ map iteration

我收到以下调试错误:

Debug Assertion Failed!
Program: Path\To\vc\include\xtree
Line: 237

Expression: map/set iterator not dereferencable

这些代码行:

for(std::map<int,IO::ctcolor>::iterator it = IO::colorTable.begin(); it != IO::colorTable.end();) {
    //left out some code here, but even without it doesn't work
    cout << "dummy"; //gets printed multiple times while iterating, so the map is not empty
    ++it;
}

for循环遍历IO::colorTable的所有元素,但在到达结尾时不会停止,我可以在循环内向控制台打印数据时看到这一点。

修改:我刚刚发现错误发生在for循环之后的行中,我错误地试图访问it

1 个答案:

答案 0 :(得分:3)

我认为问题是你在没有注意的情况下在某处增加值,错误意味着你试图取消引用end()迭代器。

看看这个code我相信它与你的非常相似,你可以看到它运行良好。

#include <map>
#include <iostream>
using::std::map;
using::std::pair;

class IO
{
private:

class ctcolor
{
private: 
    char c;
public:
    ctcolor(char c){c='c';}
};

map<int,ctcolor> colorTable;
public:
IO(){
    for(int i=0;i<10;i++)
{
   colorTable.insert(pair<int,IO::ctcolor>(i,'c'));
}
}
void io(){
    for(std::map<int,IO::ctcolor>::iterator it = IO::colorTable.begin(); it != IO::colorTable.end();) {
std::cout << "dummy"; 
++it;}
}

};

int main()
{
IO io;
io.io();
return 0;
}