3

我收到以下调试错误:

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

4

1 回答 1

3

我认为问题在于您在不注意的情况下在某处增加值,该错误意味着您正在尝试取消引用 end() 迭代器。

看看这段代码,我相信它和你的很相似,你可以看到它运行良好。

#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;
}
于 2013-06-27T21:27:42.183 回答