2011-07-20 68 views
-6

我运行下面的代码段于2008年VSSTL ::地图断言

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 ++被执行的代码崩溃。

+0

请显示更接近实际代码的代码。 –

+1

你能举一个简单的例子来实际编译和重现问题吗?你的代码在这里都是错误的。 – juanchopanza

+0

当列表为空时,绝不应执行'itrList ++'。你真实的代码有什么不同? –

回答

3

以下方法定义

ListofName GetList(){ &m_List;} 

是完全错误的!将其替换为

ListofName& GetList(){ return m_List;} 

并将它用作对象的引用而不是指向对象的指针,意思是使用“。”。而不是“ - >”

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

我建议你多阅读一下C++的基础知识。

+0

我试过你的建议,它不工作。 –

+3

如果您需要更多建议,请向我们展示更多代码。请注意,我的实际建议是了解有关C++的更多信息... –

0
#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 
    } 

}