MFC--CByteArray的方法SetAtGrow的BUG
来源:互联网 发布:java程序源代码 编辑:程序博客网 时间:2024/06/05 18:29
今天在调试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个字节
有可能是内存溢出,而导致上述问题
- MFC--CByteArray的方法SetAtGrow的BUG
- MFC--CByteArray的方法SetAtGrow的BUG
- MFC--CByteArray的方法SetAtGrow的BUG
- MFC的数组类:CArray,CByteArray,CWordArray,CDWordArray
- MFC的CByteArray、CString类用做动态字节数组使用
- CString和CByteArray的相互转化
- CString和CByteArray的相互转化
- MFC的一个bug
- VC连接SQLite3的方法(MFC封装类) 一个bug
- MFC中 CFtpFileFind 的bug
- 记录MFC各种各样的BUG
- 修正bug的方法
- MFC的CSocket的一个小Bug?
- MFC的CSocket的一个小Bug?
- MFC自绘Menu的Bug
- MFC WEBBROWSER2控件的一个BUG
- MFC中CMonthCalCtl::GetCurSel的一个BUG
- MFC中一个危险的Bug
- 284个web2.0网站+评论
- 把业务流程从操作中剥离出来
- 【近况汇报2】
- 《软件企业的绩效管理》之乱弹补充
- 努力成为一个好的架构师
- MFC--CByteArray的方法SetAtGrow的BUG
- confidence
- Simple C-Minus Compiler 简介
- (转贴)宁可不爱,也不要贫穷的爱情
- ASP.NET,如何打开别人的项目
- VS2005安装后,程序无法调试的解决方法
- 揭穿 XQuery 的神话和误解
- web2.0 Conference
- 使用MD5变换算法防穷举破译密码