Driver::~Driver()
{
AutoCritSec acsDriverList(m_csDriverList,true);
DRIVERLIST::iterator it = m_DriverList.begin();
for(;it!=m_DriverList.end();it++)
{
if (it->second == this)
{
m_DriverList.erase(it);
it = m_DriverList.begin();
}
}
}
当我在visual studio 2003中编译我的程序时,我的程序表现良好。但是当我在2010年做的一样,然后同时关闭应用程序,我得到这样map/set迭代器不可递增map/set迭代器不可递增
Expression:map/set iterator not incrementable
一些错误,当我按下忽略这一点,我得到
Expression:"standard c++ library out of range" && 0
是否有任何人有任何的想法是什么在这里:我会非常感激任何人的任何建议。吨的感谢和温暖的祝福。
擦的好推荐/删除。在这种特殊情况下,m_DriverList显然是成对的容器,或者是某种类型的映射,因为测试就在它上面 - >秒。而不是std :: remove,它需要std :: remove_if与lambda函数或比较函数。 –
如果容器是一个映射(问题标题,访问成员'second'),那么我不认为可以应用* erase-remove *成语。惯用法与您所使用的while循环相似,但不是重新开始迭代,而是复制并推进迭代器,然后擦除当前位置。 –
@DavidRodríguez-dribeas @MarkTaylor:好的;我被变量名称中的“List”分心了。在C++ 11中,'erase'将迭代器返回到下一个元素(或者如果没有下一个元素,则返回到一个尾部),并且Visual C++ 2010支持这一点。 –