c ++地图成员验证

时间:2015-01-20 07:02:57

标签: c++ dictionary stl

我有一个共享库,它使用地图将不同的计时器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;

0 个答案:

没有答案