C++ 缓冲区溢出;VS代码分析

C++ 缓冲区溢出;VS代码分析,c++,visual-studio-2012,C++,Visual Studio 2012,在VS 2012中启用静态代码分析时,以下代码因缓冲区溢出而失败 SimulationData result = rri->getSimulationResult(); //Extract the data and return struct.. RRResult* aResult = new RRResult; aResult->RSize = result.rSize(); aResult->CSize = result.cSi

在VS 2012中启用静态代码分析时,以下代码因缓冲区溢出而失败

    SimulationData result = rri->getSimulationResult();

    //Extract the data and return struct..
    RRResult* aResult  = new RRResult;

    aResult->RSize = result.rSize();
    aResult->CSize = result.cSize();
    int size = aResult->RSize*aResult->CSize;
    aResult->Data = new double[size];

    int index = 0;
    //The data layout is simple row after row, in one single long row...
    for(int row = 0; row < aResult->RSize; row++)
    {
        for(int col = 0; col < aResult->CSize; col++)
        {
            aResult->Data[index++] = result(row, col); //Over run here! but how?
        }
    }
结果是一个结构,数据是一个双指针。SimulationData是一个包含大小为rSize*cSize的“隐藏”数据的类。 我看不出这个代码怎么会失败


有人能发现它有什么问题吗?

可能有助于查看SimulationData::operator a.k.a.,result的实现。从静态代码分析的结果中查看实际描述会更有帮助。aResult->RSize和aResult->CSize的类型是什么?乘法中看起来像是溢出。RSize和CSize的类型是整数。下面是代码分析窗口中编辑为适合的描述:C6386写入“aResult->Data”时写入溢出缓冲区溢出:可写大小为“size*8”字节,但可能会写入“24”字节。“index”可能等于对“aResult->Data[2]的2次无效写入,可写范围为0到0