Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573762
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:10:30

1 现象:问题描述
M项目开发中,一应用程序在测试时输出的话单内容不正确,不是预期的内容。
2 关键过程:根本原因分析
经过初步跟踪,发现下面地方有错误,导致变量数据异常,其所包含的数据与通过流程分析得到的数据不一致。
# define    BODYLEN    1000 + 1
# define    HEADLEN    255 + 1
    ……
    char body[BODYLEN];
    char head[HEADLEN * 2];
    ……
    sprintf(body,"%s",……);
    sprintf(head,"%10d%10d%14s%150s%100s",……);
    WriteFile(fp,body);
    WriteFile(fp,head);
head的长度实际为255 + 1 * 2 = 257,存放了长度为284字节的数据,导致覆盖了body的内容。
3 结论:解决方案及效果
修改宏定义和memset的参数。
# define  HEADLEN  (255 + 1)
4 经验总结:预防措施和规范建议
上述过程看起来简单,问题也显而易见,但却是常见的错误。
一旦发生,定位问题的代价可能会很大,尤其是在较大的软件工程中,这些看似简单的地方往往不被关注,而是陷于分析复杂流程的牛角尖中,不能自拔。
开发人员在编码过程中要加强自检,避免此类错误的再次发生。
阅读(294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~