原创 编程中常见错误原因

2013-5-11 08:27 1701 16 8 分类: 消费电子

 

参考《代码大全》及自己编程(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等,没有长度限制的字符操作函数;

 

暂列如上。

文章评论6条评论)

登录后参与讨论

用户1377758 2013-5-31 13:59

总结挺细心的,很有价值。

用户1661478 2013-5-16 22:48

楼主总结不错,挺细心的

用户1681862 2013-5-14 16:30

总结的很好。

用户1610239 2013-5-14 09:36

实践出真知...很有价值.

用户1546833 2013-5-14 08:59

!!!!!!!!

用户1602177 2013-5-13 14:23

不错~~
相关推荐阅读
catch2000 2015-07-19 11:44
信号线小电阻的作用
在一块新的PCB上,测试系统能否正常运行的时候,发现系统上电后没有正常启动。  系统框图如下:   在上电的时刻,CPU A(GPIO电平2.6V)会向串口发送启动日志数据,CPU A启动后,...
catch2000 2015-07-05 17:04
协议设计中ACK机制的影响
在TCP/IP中,延时ACK和Nagle算法。  TCP为了同时处理成块数据(通常为512字节的用户数据)和交互数据(通常用户数据比较少,例如不大于10个字节),采用了延时ACK和Nagle算法...
catch2000 2015-05-23 15:48
话说物联网操作系统
最近好多家都宣布推出自己的物联网操作系统。   1. Google将要在Google I/O大会发布的Brillo; 2. 三星推出的Artik芯片搭载Mentor Graphics的...
catch2000 2015-03-31 23:52
不要采用异或来交换两个变量
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y;   y = x ^ y;   x = x ^ y; } 而不是...
catch2000 2014-10-09 07:28
为什么要测试先行
在产品的研发过程中,测试一项至关重要。不论是软件还是硬件。   软件的测试先行,在研发过程中,就做到质量的保证,因为在出现Bug的时候,容易定位Bug,而且即使是在客户端出现Bug,也能够...
catch2000 2014-10-09 07:26
C语言的面向对象编程(一)
一、前言 对于编程而言,重要的是解决问题的方式,而不是语言本身。面向对象与面向过程是解决问题和思考问题的方式。C语言常说是面向过程开发的语言,因为其缺少很多对于面向对象特性的支持。但,这并不影...
我要评论
6
16
关闭 站长推荐上一条 /2 下一条