Chinaunix

标题: map erase报错 [打印本页]

作者: jd808    时间: 2016-01-21 16:50
标题: map erase报错
  1. void TServer::AutoCloseEvent(Conn *conn)
  2. {
  3.         DataBuff *send_buf=&m_MainThreadInfo->send_buf;
  4.         if(conn->fd_type==2){
  5.                 map <int, map <int, Conn*>>::iterator iter_pro;
  6.                 if ((iter_pro = g_app_module_process.find(conn->process_conf_index)) != g_app_module_process.end()) {
  7.                         map <int, Conn*>::iterator it;
  8.                         if ((it = iter_pro->second.find(conn->GetFd())) != iter_pro->second.end()) {
  9.                                 iter_pro->second.erase(it);
  10.                         }
  11.                         if(iter_pro->second.size()==0)
  12.                                 g_app_module_process.erase(iter_pro);
  13.                 }

  14.                 if(g_app_module_process.size()<g_app_module_name.size()){
  15.                         if(g_pConf->BACKPRO==1)
  16.                                 g_module.start=0;
  17.                 }
  18.         }
  19. }
复制代码
g_app_module_process.erase(iter_pro);为啥会报错?

下面是错误信息
  1. (gdb) bt
  2. #0  std::_Rb_tree_rebalance_for_erase (__z=__z@entry=0x7f66480011d0, __header=...) at ../../../../../libstdc++-v3/src/c++98/tree.cc:370
  3. #1  0x000000000040bf33 in _M_erase_aux (__position=..., this=<optimized out>) at /usr/include/c++/4.8.2/bits/stl_tree.h:1745
  4. #2  erase (__position=..., this=<optimized out>) at /usr/include/c++/4.8.2/bits/stl_tree.h:820
  5. #3  erase (__position=..., this=<optimized out>) at /usr/include/c++/4.8.2/bits/stl_map.h:697
  6. #4  TServer::AutoCloseEvent (this=this@entry=0x7baa50, conn=0x8582b0) at routing/src/TServer.cpp:285
  7. #5  0x000000000040c39a in TServer::TimeOutCb (this=this@entry=0x7baa50) at routing/src/TServer.cpp:416
  8. #6  0x000000000040c48b in TServer::TimerCb (this=0x7baa50) at routing/src/TServer.cpp:363
  9. #7  0x0000000000408bce in MultiServer::WorkerTimerEvent (arg=<optimized out>) at routing/src/MultiServer.cpp:281
  10. #8  0x00007f66cafe3df3 in start_thread (arg=0x7f66c9b4c700) at pthread_create.c:308
  11. #9  0x00007f66c9c431ad in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113
  12. (gdb) list
  13. 280                                map <int, Conn*>::iterator it;
  14. 281                                if ((it = iter_pro->second.find(conn->GetFd())) != iter_pro->second.end()) {
  15. 282                                        iter_pro->second.erase(it);
  16. 283                                }
  17. 284                                if(iter_pro->second.size()==0)
  18. 285                                        g_app_module_process.erase(iter_pro);
  19. 286                        }
  20. 287       
  21. 288                        if(g_app_module_process.size()<g_app_module_name.size()){
  22. 289                                if(g_pConf->BACKPRO==1)

复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2