首页 > 解决方案 > 崩溃发生:std::local_Rb_tree_increment,std::local_Rb_tree_increment

问题描述

我试图找出问题所在,但我无法修复错误。根据崩溃行号,地图操作存在问题。

调用堆栈如下所述:

#0 0xf6e41720 in std::local_Rb_tree_increment (__x=0xe) at ../../../../../libstdc++-v3/src/c++98/tree.cc:65
No locals.
#1  std::_Rb_tree_increment (__x=0xf7668298) at ../../../../../libstdc++-v3/src/c++98/tree.cc:91
No locals.
#2  0x006c0738 in std::_Rb_tree_iterator<std::pair<int const, EventListner*> >::operator++ (this=<synthetic pointer>)
    at /home/dpi/Tizen4.0/tools/arm-linux-gnueabi-gcc-6.2/arm-tizen-linux-gnueabi/include/c++/6.2.1/bits/stl_tree.h:209
No locals.
#3  NetworkProxy::FindProxyReqID (eventListener=0x2133c20, this=0x7b9c0c <NetworkProxy::GetInstance()::instance>)
    at src/network/NetworkProxy.cpp:272
        httpNetworkProxyReqID = <optimized out>
        iter = <optimized out>
#4  NetworkProxy::UnRegisterEventListener (this=this@entry=0x7b9c0c <NetworkProxy::GetInstance()::instance>, 
    eventListener=eventListener@entry=0x2133c20) at src/network/NetworkProxy.cpp:65
        reqID = -149150168
        __func__ = "UnRegisterEventListener"

这是代码部分:

void NetworkProxy::UnRegisterEventListener(EventListner* eventListener)
{
    if(mEventListenerMap.size() > 0){
        ProxyReqID reqID = FindProxyReqID(eventListener);
        if(mEventListenerMap.erase(reqID) < 1){
            DEBUG_ERR("mEventListenerMap.erase failed(%d). there is no request ID", reqID);
        }
    }
}

ProxyReqID NetworkProxy::FindProxyReqID(EventListner* eventListener)
{
    ProxyReqID reqID = -1;
    std::map<ProxyReqID, EventListner*>::iterator iter;

    for(iter = mEventListenerMap.begin(); iter != mEventListenerMap.end(); ++iter) {// this is the line - 272 where the crash happened.
        EventListner* findEventListener = iter->second;
        if(findEventListener == eventListener){
            reqID = iter->first;
            break;
        }
    }
    return reqID;
}

标签: c++stdmap

解决方案


推荐阅读