2017-02-10 8 views
0
.... 
wstring wstrFirst; 
INFO_t* pstInfo = NULL; 
INFO_MAP::const_iterator itrReqInfoEnd = RequestedInfoMap_i.end(); 
for(INFO_MAP::const_iterator itrReqInfo = RequestedInfoMap_i.begin(); 
    itrReqInfo != itrReqInfoEnd; 
    ++itrReqInfo) 
{ 
    wstrFirst = itrReqInfo->first; 
    pstInfo = itrReqInfo->second; 
    ... 

См. Выше фрагмент кода. Я запускаю CODESONAR (инструмент статического анализа). Моя проблема заключается в том, что в последней строке (pstInfo = itrReqInfo->second;), CODESONAR показывает следующее сообщение об ошибке:Буфер превышения комментария от CODESONAR на stl :: map использование итератора

This code reads past the end of the buffer pointed to by itrReqInfo->.

. itrReqInfo-> evaluates to &wstrFirst._Bx.

. The first byte read is at offset 48 from the beginning of the buffer pointed to by itrReqInfo->, whose capacity is 48 bytes.

. The offset exceeds the capacity.

. The overrun occurs in stack memory. The issue can occur if the highlighted code executes.

(здесь выделен код означает pstInfo = itrReqInfo->second;)

ли ложно-положительным? Если нет, как я могу это исправить?

+0

Так что же происходит, когда вы выполняете выделенный код? Все нормально? Что Вальгринд говорит обо всем этом? – Kupto

+0

Код работает нормально. – krishnakumartg

ответ

0

Поскольку itrReqInfo является const_iterator и for только ходить его через map от начала до конца, не вижу, как все, что может быть чтение мимо предела буфера. Но вам нужно будет увидеть более полный пример этой ошибки, чтобы точно знать.

0

У меня была аналогичная проблема, о которой сообщалось в codeonar, и я исправляю ее с помощью ссылки const.

В вашем случае я хотел бы попробовать что-то вроде этого ...

wstring wstrFirst; 
INFO_MAP::const_iterator itrReqInfoEnd = RequestedInfoMap_i.end(); 
for(INFO_MAP::const_iterator itrReqInfo = RequestedInfoMap_i.begin(); 
    itrReqInfo != itrReqInfoEnd; 
    ++itrReqInfo) 
{ 
    wstrFirst = itrReqInfo->first; 
    const INFO_t& pstInfo = itrReqInfo->second;