2013-03-16 133 views
0

目前,当我一直在调用我的getFunction方法时,我得到了令人讨厌的崩溃。我的程序编译得很好,但是当我运行并调用此函数时,出现“Debug Assertion Failed!”,“Expression:vector subscript out of range”。不知道如何处理这个问题,因为我几年来一直没有在C++上做太多工作。C++ unorderedmap vector下标超出范围

void* PluginMap::getFunction(char* pguid, char* fname){ 
    if(plugin_map.size()>0 && plugin_map.find(pguid)!=plugin_map.end()) 
    { 
     //plugin_map is an unorderedmap that is defined elsewhere. 
     MicroMap* mm = &plugin_map[pguid]; 
     if((*mm).find(fname)!=(*mm).end()) 
     { 
      //MicroMap is an unorderedmap that goes in plugin_map, and contains void* 
      return (*mm)[fname]; 
     } 
    } 
    return 0; 
} 

任何帮助,将不胜感激。

+0

你在使用迭代器吗?因为如果你是,我没有看到你的代码中的任何东西。 – 2013-03-16 04:06:58

+0

不,我没有使用任何迭代器。 – robbert229 2013-03-16 04:40:14

+1

如果你使用std :: unordered_map,迭代器会让它变得更容易。下面是一个例子:http://www.cplusplus.com/reference/unordered_map/unordered_map/find/ – 2013-03-16 04:44:51

回答

1

请避免char *与std :: unordered_map使用正确的std :: string,它应该没问题。 char *被当作指针类型,除非你为它定义了std :: hash,否则可能会导致一个问题。

+0

谢谢,C++对我来说有点困惑,因为我一直在js和c#中工作,堆栈社区真棒! – robbert229 2013-03-16 04:07:53