首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

您觉得它越界了嘛

2012-09-20 
你觉得它越界了嘛?]本人菜鸟,水平有限,看到一段代码,实在搞不懂其机制。高手莫笑,帮忙解答,谢谢C/C++ code

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

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

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),你可以单步看一下,数组实际就指针,后面有数据,数组虽然越界,但指针指的位置是一个正常数据,自然不会错

热点排行