MFC--CByteArray的方法SetAtGrow的BUG
2006-06-27 22:13
393 查看
今天在调试IO驱动时,发现了CByteArray的方法SetAtGrow的一个BUG。
发生问题的代码如下:
switch(mItems[i].lngTemp[2])
{
case TYPE_BIT:
case TYPE_B:
case TYPE_BCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
break;
case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
break;
case TYPE_DW:
case TYPE_DI:
case TYPE_R:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+2,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+3,'R');
break;
}
当该段代码被n次(约75左右)调用后,当mItems[i].lngTemp[0]>540时
case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R'); -- 这句没有问题
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R'); -- 这句会使程序崩溃
break;
目前修改为:
if(bytFlag.GetSize()<mItems[i].lngTemp[0]+2)bytFlag.SetSize(mItems[i].lngTemp[0]+2);
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
则程序没有问题了,看来SetAtGrow真有点问题
----------------------------------------------
后记:后来发现真正解决问题的症结为:
VC++ int 4个字节 long 4个字节
DOS C/C++ int 2个字节 long 4个字节
VB integer 2个字节 long 4个字节
有可能是内存溢出,而导致上述问题
发生问题的代码如下:
switch(mItems[i].lngTemp[2])
{
case TYPE_BIT:
case TYPE_B:
case TYPE_BCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
break;
case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
break;
case TYPE_DW:
case TYPE_DI:
case TYPE_R:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+2,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+3,'R');
break;
}
当该段代码被n次(约75左右)调用后,当mItems[i].lngTemp[0]>540时
case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R'); -- 这句没有问题
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R'); -- 这句会使程序崩溃
break;
目前修改为:
if(bytFlag.GetSize()<mItems[i].lngTemp[0]+2)bytFlag.SetSize(mItems[i].lngTemp[0]+2);
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
则程序没有问题了,看来SetAtGrow真有点问题
----------------------------------------------
后记:后来发现真正解决问题的症结为:
VC++ int 4个字节 long 4个字节
DOS C/C++ int 2个字节 long 4个字节
VB integer 2个字节 long 4个字节
有可能是内存溢出,而导致上述问题
相关文章推荐
- MFC--CByteArray的方法SetAtGrow的BUG
- MFC--CByteArray的方法SetAtGrow的BUG
- StartActivityForResult() 和setResult() 方法获取不到result 的BUG
- Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 4171 异常的解决方法
- iOS隐藏导航栏尽量用set方法,不要用点。。。会出BUG。。。
- [MFC]对CString::GetBufferSetLength方法的探究
- osg旋转模型之setViewMatrixAsLookAt()方法和setHomePosition()方法
- [MFC]对CString::GetBufferSetLength方法的探究
- 解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug
- linux2.6内核移植zc301摄像头时 kernel BUG at arch/arm/mm/dma-mapping.c:409!..的解决方法
- QPrinter 的 setPaperSize 方法似乎有 bug
- [MFC]对CString::GetBufferSetLength方法的探究,需要ReleaseBuffer,GetLength才正确!
- VC连接SQLite3的方法(MFC封装类) 一个bug
- QPrinter 的 setPaperSize 方法似乎有 bug
- myeclipse生成属性的get,set方法bug
- [MFC]对CString::GetBufferSetLength方法的探究
- MFC中SetFont(CFont *font)方法容易出错点
- MFC中获得系统时间的方法
- android 中遇到 imageView getWidth 始终为0 时 ,设置 setImageBitmap 的方法
- setAlpha方法 设置透明度