我有一个共享库,它使用地图将不同的计时器ID存储到偶数映射......
当我尝试获取值时,使用下面的[]运算符,代码会因信号11而崩溃。
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 )
代码完美无缺。
假设密钥在两种情况下都有效,为什么代码在第一种情况下崩溃?我知道第二种访问方式是安全的,但假设密钥在两种情况下都有效,为什么呢?使用[] operator?
访问map的第一种方式代码崩溃了有关详细信息,这是初始化地图的方式。
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;