C++地图成员验证
我有一个共享库,它使用一个映射来存储不同的计时器ID到eventid映射 当我尝试使用lower[]操作符获取值时,代码在信号为11时崩溃C++地图成员验证,c++,dictionary,stl,C++,Dictionary,Stl,我有一个共享库,它使用一个映射来存储不同的计时器ID到eventid映射 当我尝试使用lower[]操作符获取值时,代码在信号为11时崩溃 long timerId = _timerIdsMap[specifiedEvent]; 现在,当我将其更改为以下格式时 map<int, long>::iterator EventIterator; EventIterator = _timerIdsMap.find( specifiedEvent ); if(Ev
long timerId = _timerIdsMap[specifiedEvent];
现在,当我将其更改为以下格式时
map<int, long>::iterator EventIterator;
EventIterator = _timerIdsMap.find( specifiedEvent );
if(EventIterator!=_timerIdsMap.end())
{
// long timerId = _timerIdsMap[specifiedEvent];
long timerId = EventIterator->second;
if( _timer.cancel( timerId ) < 0 )
如果密钥有效,则其工作原理相同。您的第二个代码段没有初始化您在第一个代码段中使用的映射。如果映射不存在,此行将在映射中插入成员_TimerMap[specifiedEventVal]=处理程序;我怀疑代码是在运算符[]的使用下面的一行之后不久出现的,在该行中,您使用零是因为在地图中不存在的项目上使用运算符[]而产生的。您没有显示足够的代码。您没有显示要存储到_timerIdsMap中,您显示了不同映射的代码,您没有显示迭代器选项上的else子句,您没有显示timerId是如何使用的。崩溃不是因为使用了操作符[]。我猜问题出在其他地方,只是碰巧出现在那条线上。如果该键在映射中不存在,它将添加一个默认的构造对并返回值。
bool TimerManager::start_interval_timer( TimerEventHandler* handler, int* specifiedEvent, int sec, int usec, int intervalSec, int intervalUsec)
{
bool retVal = true;
int specifiedEventVal = *specifiedEvent;
long timerId = -1 ;
_timersMap[specifiedEventVal] = handler;