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 显示以下错误:

此代码读取超出 itrReqInfo-> 指向的缓冲区的末尾。

. itrReqInfo-> 计算结果为 &wstrFirst._Bx。

. 读取的第一个字节位于 itrReqInfo-> 指向的缓冲区开头的偏移量 48 处,其容量为 48 个字节。

. 偏移量超出容量。

. 溢出发生在堆栈内存中。如果执行突出显示的代码,则可能会出现此问题。

(此处突出显示的代码表示pstInfo = itrReqInfo->second;

是假阳性吗?如果没有,我该如何解决?

4

1 回答 1

0

由于itrReqInfois aconst_iterator并且 the只是从头到尾for遍历它,因此看不到任何内容如何读取超过缓冲区限制。map但是需要查看此错误的更完整示例才能确定。

于 2017-02-10T05:57:42.877 回答