catch2000的笔记 https://passport2.21ic.com/?584386 [收藏] [复制] [RSS]

日志

编程中常见错误原因

热度 4已有 908 次阅读2013-5-18 13:12 |系统分类:嵌入式系统| 编程,

参考《代码大全》及自己编程(C)中的一些错误记录,总结编程中产生错误的一些原因

1.拼写错误

a)        变量名,宏名,函数名等拼写错误,在编译阶段直接报错;

b)       变量名,宏名,函数名等拼写为相近的变量名,宏名,函数名等,在运行时出错;

2.逻辑错误

a)        if语句的真值逻辑判断,没有包括全部的条件,或者包含了不需要的条件;

b)       选择计算方式时,采用了错误的计算方法;

3.边界值问题(Off-one)

a)        if语句判断的边界值问题;

b)       while/for等语句的边界判断问题;

4.调用错误的近似函数

a)        函数名相近的函数,调用错误;(过去一段时间常调用错的memset/memcpy)

5.变量初始化问题

a)        局部变量初始化;

b)       函数入参的初始化;

c)       函数返回值的初始化;

d)       释放内存的初始化;

6.编译时的警告问题

a)        参照以前的常见警告列表;

7.版本管理

a)        很重要,需要做好版本管理;

8.可读性

a)        很重要,减轻以后的维护压力;

 

相应错误导致程序运行时出现的一些问题:

1.拼写错误;

a)        内存溢出;

b)       出现意外的结果;

2.逻辑错误;

a)        对于特定的值计算出现错误;

b)       对于某些条件,执行出错;

c)       数组越界;

d)       内存溢出;

3.边界值问题

a)        部分可归于逻辑错误;

b)       数组越界;

c)       内存溢出;

d)       循环结束时,出现多操作或者少操作一个元素;

4.调用错误的近似函数

a)        内存溢出;

b)       计算错误;

c)       结果在意料之外;

5.变量初始化问题

a)        大部分时候运行正确,偶尔运行错误;

b)       大部分时候运行错误,偶尔运行正确;

c)       在有些地方运行正确,在其他地方运行失败;(在某些函数之前,之后,之中)

6.编译器警告问题

a)        影响很严重;

b)       影响很小;

c)       没有影响;

 

找到原因的难易

1.拼写错误

a)        在编译时出现的错误,好找;

b)       在运行时出现的错误,有些好找,有些不好找;

2.逻辑错误

a)        错误没有出现,不好找,需要特定的条件,因为大部分时候运行正确,只有在特定值或者特定条件出现错误;

b)       错误如果出现了,比较好重现,这个时候变得好找;

3.边界值问题

a)        同(2)

4.调用错误的近似函数

a)        一般会导致运行出错,比较好找;

5.变量初始化问题

a)        如果想到了初始化问题,比较好找;

b)       如果没有想到初始化问题,十分难找;(因为现象出现随机,比较灵异。一般如果程序出现了比较灵异的运行现象,需要考虑初始化问题)

7.编译器警告问题

c)       重视警告,分析警告问题。

 

其他一些错误原因:

1.不同类型指针间的强制类型转换;造成数据截断或者错误

2.不同类型变量间的强制转换;造成数据截断

3.调用一些不安全的函数,如strcat等,没有长度限制的字符操作函数;

 

暂列如上。

1

路过

鸡蛋

鲜花

握手

雷人

刚表态过的朋友 (1 人)

评论 (0 个评论)