stl:地图断言

stl::map assert

本文关键字:断言 地图 stl      更新时间:2023-10-16

我在VS 2008上运行以下代码

 typedef map<int ,string> ListofName;
 Class abc
 {
    ListofName m_List;
    ListofName  GetList(){ &m_List;}
 }
 ThredProc(void* args)
 {
     abc* pabc = (abs*)args;
     for( ListofName:: iterator itrList = GetList()->begin(); 
                  itrList != GetList()->end();
                  itrList++)
     {
       // some operation
     }

}

当列表为空时,代码在执行itrlist++时崩溃

下面的方法定义

ListofName  GetList(){ &m_List;}

是完全错误的!用

代替
ListofName&  GetList(){ return m_List;}

并使用它作为对象的引用,而不是对象的指针,这意味着使用"。"而不是"->"

 for( ListofName:: iterator itrList = GetList().begin(); 
              itrList != GetList().end();
              itrList++)

我建议你多读一点c++基础知识

#include <map>
#include <string>
typedef std::map<int ,std::string> ListofName;
class abc{
public:
    ListofName m_List;
    ListofName&  GetList(){ return m_List;}
 };
void testfunction(void* args){
     abc* pabc = (abc*)args;
     for( ListofName::iterator itrList = pabc->GetList().begin(); 
                  itrList != pabc->GetList().end();
                  itrList++)
     {
       // some operation
     }
}