你觉得它越界了嘛?
]本人菜鸟,水平有限,看到一段代码,实在搞不懂其机制。
高手莫笑,帮忙解答,谢谢
- 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),你可以单步看一下,数组实际就指针,后面有数据,数组虽然越界,但指针指的位置是一个正常数据,自然不会错