读书人

您觉得它越界了嘛

发布时间: 2012-09-20 09:36:50 作者: rapoo

你觉得它越界了嘛?
]本人菜鸟,水平有限,看到一段代码,实在搞不懂其机制。

高手莫笑,帮忙解答,谢谢

C/C++ code
是否越界,这段代码运行了很多年了,一直没报错问题在注释中,我都标出来了。struct CompressedNowData{    CZMReplyHead    m_dhHead;    CodeInfo        m_ciStockCode;    unsigned long    m_lChangedData;  // 俺码1    unsigned long    m_lChangedData2; // 俺码2    long            m_nSize;            float            m_lData[1];        //问题在于这个成员        }};    CompressedNowData* pNowData = (CompressedNowData*)pSendData;    float* lValue = pNowData->m_lData;        //指向到了数组m_lData[1];//省去部分代码    pField = DBShow.CompFieldBuffer(Show128.f_sbmcjg4,pOldRecord,nFieLen, yyyCount,&pFieldPos[nFieldPos++]);                if(pField != NULL)                {                    //fValue = _atof(pField,nFieLen);                    lValue[nIndex] = DbfFloatConvert(pField,nUnit,nFieLen);                    nIndex++;                            //look here                    pNowData->m_lChangedData |= ZD_SellPrice4;                }                                pField = DBShow.CompFieldBuffer(Show128.f_sbmcsl4,pOldRecord,nFieLen, yyyCount,&pFieldPos[nFieldPos++]);                if(pField != NULL)                {                                        //dVolue = _atof(pField,nFieLen) / 100;                    lValue[nIndex] = ConvertFloatToLong_Send(pField,nFieLen);                    nIndex++;                                //look here                    pNowData->m_lChangedData |= ZD_SellCount4;                }跟踪可以发现,index远远大于1。为什么不越界





[解决办法]
pSendData里面数据的长度显然远大于sizeof(CompressedNowData),你可以单步看一下,数组实际就指针,后面有数据,数组虽然越界,但指针指的位置是一个正常数据,自然不会错

读书人网 >C++

热点推荐