当programm执行此私有方法时
map<char*, vector<MAILPACK>>::iterator mit;
vector<MAILPACK>::iterator dit;
for(mit=funcs.begin(); mit!=funcs.end(); mit++) {
TRACE tr;
tr.crc32 = crc32;
strncpy(tr.name, (*mit).first, sizeof(tr.name));
int i = 0;
for(dit=(*mit).second.begin(); dit!=(*mit).second.end(); dit++){
tr.nodes[i++] = dit->dwAddr;
}
}
我收到如下错误:Expression:map/set iterator not incrementable
此函数遍历私有地图std::map<char*, std::vector<MAILPACK>> funcs;
我哪里错了? THX
P.S。哦,我发现在将地址保存到tr.nodes时我没有控制边界。 但这不是重点......
答案 0 :(得分:1)
有些typedef
不会误入歧途。并且预先增加你的迭代器,避免无用的迭代器对象副本。
typedef vector<MAILPACK> Mailpacks;
typedef map<char*, Mailpacks> MailpackMap;
for(MailpackMap::iterator mit=funcs.begin(); mit!=funcs.end(); ++mit)
{
TRACE tr;
tr.crc32 = crc32;
strncpy(tr.name, (*mit).first, sizeof(tr.name));
int i = 0;
Mailpacks& mail = (*mit).second;
for(Mailpacks::iterator dit= mail.begin(); dit!=mail.end(); ++dit)
{
tr.nodes[i++] = dit->dwAddr;
}
}
我同意@Chowlett,并且认为你正在从tr.nodes
边界和你的一个迭代器中走出来。由于您在循环期间实例化TRACE
对象,因此很有可能发生这种情况。当您的迭代器无效 时,您通常会收到Expression:map/set iterator not incrementable
错误。
你tr.nodes
会员有什么理由也不能成为一个载体吗?
tr.nodes.push_back(dit->dwAddr);
我可能错了,更多信息总是有帮助。