映射不可增量错误

时间:2014-06-10 18:38:26

标签: c++ stl

我正在使用一个小型库来建立数据库连接池。

但是,当我运行提供的示例时,在它调用DestroyPool时,我得到的映射不是可递增的断言失败。

这是代码

template <typename T>
int CommonDatabasePool<T>::DestroyPool(){
    typename map<T*, short>::iterator iter;
    for( iter = poolmap.begin(); !poolmap.empty()&& iter != poolmap.end(); iter++ ) {
        if(iter->second == DBPOOL_POOLEDCON_FREE){
            MyReleaseConcreteConnection(iter->first);
            poolmap.erase(iter);
        }
    }
    exitkeepalivepool = true;

    if(XSemPost(&semhandle)==-1){
    }
    if(XThreadJoin(&threadhandle)==-1){
    }

    return poolmap.size();
}

这里有什么东西看起来可疑会导致这样的错误吗?

无论我是否使用任何连接,它仍然会这样做......

由于

1 个答案:

答案 0 :(得分:3)

从根本上说,您正在执行此代码:

for(iter = poolmap.begin(); iter != poolmap.end(); iter++) {
    poolmap.erase(iter);
}

此代码尝试在不再有效的迭代器上调用iter++


您可以通过以下方式解决此问题:

typename map<T*, short>::iterator iter = poolmap.begin();
while (iter != poolmap.end()) {
    if (iter->second == DBPOOL_POOLEDCON_FREE) {
        MyReleaseConcreteConnection(iter->first);
        iter = poolmap.erase(iter);
    } else {
        iter++;
    }
}