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 经验总结:预防措施和规范建议
上述过程看起来简单,问题也显而易见,但却是常见的错误。
一旦发生,定位问题的代价可能会很大,尤其是在较大的软件工程中,这些看似简单的地方往往不被关注,而是陷于分析复杂流程的牛角尖中,不能自拔。
开发人员在编码过程中要加强自检,避免此类错误的再次发生。
阅读(289) | 评论(0) | 转发(0) |