叶帆工作室

嵌入式开发爱好者(十年开发经验,精通C/C++/VC/VB/C#...)

用户操作
[即时聊天] [发私信] [加为好友]
刘洪峰ID:yefanqiu
534273次访问,排名80(1)好友0人,关注者217
微软MVP / CSDN 2008十大MVB/MSDN中文技术论坛版主
yefanqiu的文章
原创 218 篇
翻译 0 篇
转载 3 篇
评论 1099 篇
叶帆的公告
本博客原创文章,作者保留一切权利,需经作者同意后方可转载,转载时 请注明[叶帆工作室]及文章链接。yefan@vip.sina.com
【简介】叶帆[微软MVP]
【文章】叶帆文章列表
【软件】叶帆共享软件列表
最近评论
BinYu:我用的是vista home basic sp1,但vs2005强行装不上去,请帮忙分析一下,qq:811344767,先谢谢了
wjh6877:算法想好了吗?

没有就是空话
一生好人:其实我也想来正版,但生活逼人,没办法啊
fox23:something like java card;-)
wwqqha:不错不错
文章分类
收藏
    相册
    叶帆照片
    【叶帆软件】
    [01]VB源码之友(V2.1.548)
    [02]API浏览器.net(V5.0)
    [03]叶帆成语词典(V2.0.8)
    [04]叶帆密码库(V1.2.8)
    【叶帆资源】
    DAO 2.0引擎
    叶帆快速通道
    MSDN-MVP
    Windows Embedded 专题
    中文MSDN
    叶帆圈子--工业自动化
    叶帆工作室(博客园)
    叶帆工控--工业自动化
    叶帆群组--工业应用开发
    微软中文技术论坛
    微软硬件创新中心(HIC)
    瑞康社区论坛
    叶帆友情链接
    张欣
    枕善居
    莫依
    葛涵涛
    郑建
    陈辉
    马宁
    马骐
    魏涛序
    黎波
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 变量溢出引发的错误收藏

    新一篇: FAT文件系统几点释疑 | 旧一篇: 北京地铁十号线现场考察

     

    前几天II型隧道广告由于安装位置由边墙调整到中墙,这一改动相当于列车到来的方向发生了逆转,程序需要改动才能适应这种情况。worker_1983网友曾留言说,“还好地铁只是朝一个方向开.如果反着开可就有意思了”,可谓一针见血,不过对我们来说不是有意思,麻烦大了。

    在改动方面,其实对软件来说改动量不大,仅对下载的数据有一定调整,由于早期的程序用VB开发(唉,已经几年没用VB编写程序了,代码看起来很亲切),倒是在哪里插入这段代码费了我不少时间(由此想到了一个流传甚广的小故事,一个有名的工程师解决电机问题后,面对别人的质问时说,画一根线一美元,知道在哪里画需要999美元)。

    程序很简单,如下:

    Public Sub PicData(bytData() As Byte)
        … … 
        
    '------------------------------------------------
       Const intDataSize = 6144 'G_PicWidth * 24
        Dim bytData3(intDataSize) As Byte
        
    Dim bytData6(intDataSize) As Byte    
        
    On Error GoTo ToExit '打开错误陷阱

        
    '第3块数据缓存
        CopyMemory bytData3(0), bytData(intDataSize * 3), intDataSize
        
    '第5块数据移到第3块位置
        CopyMemory bytData(intDataSize * 3), bytData(intDataSize * 5), intDataSize
        
    '第6块数据移到第5块数据位置
        CopyMemory bytData(intDataSize * 5), bytData(intDataSize * 6), intDataSize
        
    '第3块数据移动到第6块位置
        CopyMemory bytData(intDataSize * 6), bytData3(0), intDataSize
        
    '------------------------------------------------
        … …
        
    Exit Sub
        
    '----------------
    ToExit:
    End Sub

    程序修改编译后,信心满满的给硬件人员进行下载调试了,过了近一天的时间,一问硬件技术人员,说下载数据后,画面异常,不知道是硬件问题还是软件问题。只好把笔记本带到测试室,和硬件人员一起调试确认。就这么几句代码,费了我不少时间,我才发现问题的所在,第一我发现6144*6一定大于32千多,意味做对integer整型有可能溢出,第二错误处理直接退出了,没有提示(这种做法真危险!),第三定义intDataSize没有定义类型,默认也就是integer了。

    Const intDataSize = 6144 代码修改为Const intDataSize  As Long = 6144

    问题搞定。幸好修改的代码不多,否则这点错误还真要命,此外得到教训是,调试程序时最好把程序错误处理暂时关掉(或错误存在文件里,不过这个时候够呛想到去看)。

     

    发表于 @ 2008年03月08日 19:14:00|评论(loading...)|编辑

    新一篇: FAT文件系统几点释疑 | 旧一篇: 北京地铁十号线现场考察

    评论

    #nihao331123 发表于2008-03-09 11:38:06  IP: 218.61.108.*
    改错时的注意事项
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 叶帆