....
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 показывает следующую ошибку:
Этот код читает после конца буфера, на который указывает itrReqInfo->.
. itrReqInfo-> оценивает &wstrFirst._Bx.
. Первое чтение байта происходит по смещению 48 от начала буфера, на который указывает itrReqInfo->, емкость которого составляет 48 байтов.
. Смещение превышает емкость.
. Переполнение происходит в памяти стека. Проблема может возникнуть, если выделенный код выполняется.
(здесь выделенный код означает pstInfo = itrReqInfo->second;
)
Это ложно-положительный? Если нет, как я могу это исправить?
поскольку itrReqInfo
это const_iterator
и for
только идет через map
от начала до конца, не вижу, как что-либо может быть прочитано за пределами буфера. Но нужно было бы увидеть более полный пример этой ошибки, чтобы знать наверняка.
Мне сообщили о подобной проблеме в Codesonar, и я исправил ее, используя «const reference».
В вашем случае я бы попробовал что-то вроде этого …
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;