[转载]程序员低级错误大收集,各个痛心疾首

简介:

原文地址: CSDN老紫竹博客 http://blog.csdn.net/java2000_net/archive/2009/04/22/4101450.aspx

先汇总一下错误的分类吧 
1 全角问题 
2 =和==的问题 
3 空格问题 
4 拼写问题 
5 疏忽,忘记做该做的事情 
6 新东西,不是很熟悉 


下面是明细,呵呵呵。 

1 老紫竹(java2000_net) 
我最难忘的一次,是自作聪明的在一个for循环后面加上了一个分号,而且是在大量的代码重构之后,运行时偶尔发生这个错误。 
大概用了我近1周的时间。 

从那之后,我的代码的大括号,就都放在代码行的后面了!

  1. for(int i=0;i<=10;i++);   
  2. {   
  3.   //   
  4. }  

 

  1. for(int i=0;i<=10;i++);{   
  2.   //   
  3. }  



编辑器格式化代码时,可以有很大的帮助。 
说说大家曾经常犯的低级错误吧,也好让其它朋友有个心理准备,想拿块豆腐砸自己脑袋的冲动少几次。 


2 jsp页面莫名的报空指针,而且有时出有时不出。最后发现是jsp代码里混了个全角的空格,排版比较乱的时候看不出来。然后那空格被当变量名的一部分了,偏偏那变量还不常用。悲剧啊( ̄(工) ̄) 

3 当年用vc,貌似写个类似于jTable的东西,在我的机器上一切都好,在老板(小公司,cto也是老板之一)的机器上一跑就死。。。。。。。。然后发现,我的机器分辨率是640×480,老板的是800×600的,结果数组溢出。。。。。。。 


4 写了2个preparestatement,一顿addbatch,然而最后只写了一个preparestatement.executeBatch();找了n长时间才看到问题所在。 

5 三层架构里面的业务逻辑层比如:


  1. public bool Add(hLink.Model.FavoriteInfo model) {   
  2.   return dal.Add(model) > 0;   
  3. }  


写成了


  1. public bool Add(hLink.Model.FavoriteInfo model) {  
  2.   return Add(model) > 0;   
  3. }  


还好碰到了一次,以后报stackoverflow...异常就知道什么错了,呵呵、 

6 struct CXTEST_DAT 

... 
WORD wLen; 
... 

int TestData(..., DWORD dwLen); 
使用时: 
CXTEST_DAT stData; 
TestData(..., stData.wLen); 
自动扩展为DWORD后,长度总是不对 

7 我也经常犯低级错误,但我觉得并不可笑,每次发现自己犯低级错误后,自己的印象也更加深刻,重复犯错的机率就小了很多。 

比如,我第一次使用Java枚举时是这样写:


  1. /** 
  2.  * SQLCommandType SQL命令类型枚举 
  3.  * @author CodingMouse 
  4.  * @version 1.0.0.1 
  5.  */  
  6. public enum SQLCommandType {  
  7.           
  8.     /** 
  9.      * SQL查询数据命令 
  10.      */  
  11.     SELECT,  
  12.     /** 
  13.      * SQL插入数据命令 
  14.      */  
  15.     INSERT,  
  16.     /**  
  17.      * SQL修改数据命令  
  18.      */  
  19.     UPDATE,  
  20.     /** 
  21.      * SQL删除数据命令 
  22.      */  
  23.     DELETE  
  24.       
  25. }  



当在方法中switch传入的枚举参数值时:


  1. switch(枚举变量) {  
  2.     case SQLCommandType.SELECT  
  3.         // 中间的逻辑处理  
  4.          break;  
  5.     case SQLCommandType.INSERT  
  6.         ......  
  7. }  



语法老报错,却不知道怎么回事,明明Java中的switch分支是支持枚举的啊? 
后来摆渡了一下才知道原来switch分支中case枚举时是不需要加枚举类型前缀的。 


8 oracle ,写sql 语句时候 怎么老是提示错误 ,语句老长 ,调试了一天 ,眼睛看花了 ,结果一看 ,掉了个冒号!! 
老紫竹的家


9 又一次 装了个防火墙 运行myeclipse的时候 报错,说端口有问题 ,我还以为是被占用 或者tomcat的问题 弄了半天 百度 Google 都无果,猛然发现是被防火墙拦截了 


10 struts.xml ------>sturts.xml 


11 用C言语时 
if(i=1) 

}本来我是想判断真假 
结果...... 


12 在修改配置文件的时候,就因为一个空格,而找了半天的错误 

老紫竹的家
13 在维护公司一个比较老的项目的时候,自作聪明地写了这么一个类(主要是为了共用数据库连接) 
public class DataQuery{ 
//静态的connection 
private static Connection con=ConnectionFactory.getConnection(); 

private Collection <User> getUsers(int groupId){ 
Statement st=null; 
ResultSet rs=null; 
try{ 
st=con.createStatement(); 
String SQL="......"; 
...... 
}catch(Exception e){ 
e.printStackTrace(); 



//其他查询方法,共用一个connection...... 


因为这个项目已经运行了5年了,Struts1.1的时候就做的这个项目,老紫竹的家实在没有办法在里面配连接池,于是自作聪明在里面做了这种事 
唉 
后果很显然啊 
要么是connection太多,要么是某个地方把connection关了导致其他方法抛空指针 
还好,出问题的时候拿过来跟了一把马上意识到了这个愚蠢的问题 
唉。。。 


14 以前犯过一个错误,在while()中==写成=了。 
因为开始的时候写的是正确的,后来不知道怎么不小心误操作删掉一个等号,结果程序死活不对了。当时是在一个嵌入式平台上,开发环境很垃圾,所以还老以为是编译环境的bug。 

昨天写程序调出了n个bug,一个是在finally加返回语句了,程序输出的正好有别的异常,所以没往这考虑。搞了半个下午才发现问题。 
还有指针的问题是最让人头疼的了。 



15 用中文输入法输入全角的分号,结果编译不通过,还查不出原因 

老紫竹的家
16 select * from a where a.idin(.....) 


17 前10分钟写JAVA代码,写好后再写javascript代码 
错误: 
for(int i = 0 ; i < xxx.length; i++){ 

正确: 
for(var i = 0 ; i < xxx.length; i++){ 

老紫竹备注:这个错误太长见了,我也经常如此 


18 我的第一个错误是,UPDATE 是后面没有加条件,结果,所有数据全部,UPdate了,呵呵,老板猛劈!!! 


19 有此写存储过程传进来的参数USERId, 有张涉及到的表有字段userId 
存储过程有一个条件为 update *** where userId = USERID; 
把数据库干翻了,后悔得要死。 
不区分大小写啊


20 把表单里面的input标签的类型写成了submit,本来这是正常的,但是我的目的是想在input类型中触发某一个方法,然后在页面上显示相应的数据,并不是想提交整个表单,结果我一点input中的按钮,页面始终没有反应,新数据就是不能够显示,搞了整整两天才发现这个简单的问题! 


21 for (int i = 0,len = arr.size(); i < len; i++) { 
temp = arr.get(0); 

。。。循环下来都取的第一个元素。。。 


22 改linux内核的时候缓冲区长度定义为128字节,后来改了方案,老紫竹的家需要512字节的缓冲区,忘了改定义,结果一赋值缓冲区溢出,内核崩溃,查了几个月才查出是什么原因 


23 写SQL存储过程的时候拼接字符串的长度给的太小,导致多条件查询的时候总是出现bad results。。。 


24 VB的代码 
FOR I=1 to N 
Next 
忘记给I加一了 

老紫竹的家
25 操作注册表是造成了溢出,把堆破坏了,造成了之后的代码,只要申请new,malloc就出错,查了半天才查出来。 
主要是写注册表的函数的参数是传出参数,返回指超出了定义的长度。 
还有就是c下,segment错误, 数组越界,很难查,都是运行时出错, 访问了不能访问或无效的地址。 


26 嵌套循环用同一个变量


  1. int i=0;  
  2. while(i<10){  
  3.   for(i=0;i<5;i++){  
  4.     ....  
  5.   }  
  6. }  




27 印象最深刻的就是c#的一个循环 
if后面忘加{} 

调了一个下午 

28 引用窗体类指针是直接定义头文件用 没有在App中存放 造成指针不一样,调不出相应成员(VC) 


29


  1. Sring date  = request.getParameter("date");   
  2.     
  3.  if(!"".equals("date")){   
  4.      .....   
  5.  }   
  6.     
  7.  ........   



最低级的错误...... 
老紫竹备注:我也犯过多次,习惯的就把双引号加上去了 

30 循环变量搞错了 
for( int i=0; i!=5; ++i ) 

for( int j=0 j!=5; ++i ) 



31 记得初学Delphi 的时候,把程序代码保存在了一个中文命名的目录下,按F9 编译加运行, 
始终运行失败,到处找人帮忙看,整个项目组高手都找遍了,都觉得奇怪,折腾了好久,都解决不了,各种方法都用尽了, 
就是不能正常运行,后来把程序重新抄了一遍,换了个文件夹,问题解决了。 
从那以后再也不敢把程序放在中文文件夹了,这事过去五六年了还记得。 


老紫竹的家
32 打包的时候不修改数据库配置文件,然用户在测试数据库上跑 


33 昨晚写条件语句时把If()的括号输成了全角的格式。偏偏那个IF括号还是嵌套的,盛怒之下卸掉了所有中文输入法,今天又重新装上 


34 一次用了ImageButton,结果又用js进行的提交,照成了冗余数据,后来才知道ImageButton是会submit的~ 

35 数据库时的case语句 
case when then 
后面总是忘了写end 

36 写SQL语句用全角的逗号然后调试总是报sql语句错误动员很多同事帮我查错,最后发现被同事鄙视很久 


37 我最近也在维护公司的一个网站,发现原来写程序的那个人也是用了全局的静态的连接,导致访问的人多时老是出现数据列不存在的错误,他竟然在数据层中用一个这样的变量,搞得上面说我写的程序有问题,自从修改后就没出现不存在数据列的问题了.呵呵. 
老紫竹备注: static 这东西,老紫竹的家你一定要知道他到死是干啥的再用,否则你还是去掉比较保险,虽然浪费点内存。但问题出现的越早越好啊。 


38 一个变量命名中的0写成O,不知道几个兄弟可以不戴眼镜找出来 


39 form写成了from。。。。。。。


本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/05/23/1487870.html,如需转载请自行联系原作者。

目录
相关文章
|
22天前
|
SQL 安全 程序员
PHP编程中的关键性错误及解决方法
在PHP编程过程中,程序员常常会遇到一些关键性错误,这些错误可能会导致程序运行异常甚至崩溃。本文将重点探讨PHP编程中常见的关键性错误,并提供解决方法,帮助程序员更好地应对这些问题,提高编程效率和代码质量。
13 1
|
3月前
|
存储 程序员 编译器
C陷阱与缺陷:语法陷阱
C陷阱与缺陷:语法陷阱
24 0
|
11月前
关于《生成器运行时机导致的难以察觉的 bug》勘误
关于《生成器运行时机导致的难以察觉的 bug》勘误
54 0
|
12月前
|
缓存 前端开发 中间件
服务器开发-纠正之前的错误
服务器开发-纠正之前的错误
65 0
|
12月前
|
自然语言处理 编译器 程序员
【C陷阱与缺陷】----语法陷阱
由于一个程序错误可以从不同层面采用不同方式进行考察,而根据程序错误与考察程序的方式之间的相关性,可以将程序错误进行划分为各种陷阱与缺陷
68 0
|
12月前
|
编译器 C语言
源于《C陷阱与缺陷》----研究程序死循环问题
所以最后答案应该就是打印了12次xiao tao,然后越界访问出现错误,使arr[10]=0,arr[11]=0了 但最后答案却不是这样。
80 0
|
数据采集 人工智能 数据管理
开始数据治理时三个常见的陷阱和解决方法
当我们与客户合作帮助他们提高数据管理能力时,大多数部门都同意更好的数据治理将有助于解决他们的数据问题。
开始数据治理时三个常见的陷阱和解决方法
|
自然语言处理 编译器 C语言
|
前端开发 Java 开发工具
面试过程中千万不要犯这 5 点低级错误!
面试过程中千万不要犯这 5 点低级错误!
122 0
面试过程中千万不要犯这 5 点低级错误!
|
开发者 前端开发
[译] 如何避免我作为初级开发者时所犯下的 7 个错误
我们应该从中吸取教训。在成为高级开发者的过程中,我犯过许多错误。本文讲述了当我还是初级开发者时犯过的 7 个严重错误,以及如何避免这些错误。
849 0