程序員低級錯誤大收集,各個痛心疾首

先彙總一下錯誤的分類吧
1 全角問題
2 =和==的問題
3 空格問題
4 拼寫問題
5 疏忽,忘記做該做的事情
6 新東西,不是很熟悉


下面是明細,呵呵呵。

1 老紫竹(java2000_net)
我最難忘的一次,是自作聰明的在一個for循環後面加上了一個分號,而且是在大量的代碼重構之後,運行時偶爾發生這個錯誤。
大概用了我近1周的時間。

從那之後,我的代碼的大括號,就都放在代碼行的後面了!

for(int i=0;i<=10;i++);   
{   
  //   
}  
for(int i=0;i<=10;i++);
{
  //
}

for(int i=0;i<=10;i++);{   
  //   
}  
for(int i=0;i<=10;i++);{
  //
}

編輯器格式化代碼時,可以有很大的幫助。
說說大家曾經常犯的低級錯誤吧,也好讓其它朋友有個心理準備,想拿塊豆腐砸自己腦袋的衝動少幾次。


2 jsp頁面莫名的報空指針,而且有時出有時不出。最後發現是jsp代碼裏混了個全角的空格,排版比較亂的時候看不出來。然後那空格被當變量名的一部分了,偏偏那變量還不常用。悲劇啊( ̄(工) ̄)

3 當年用vc,貌似寫個類似於jTable的東西,在我的機器上一切都好,在老闆(小公司,cto也是老闆之一)的機器上一跑就死。。。。。。。。然後發現,我的機器分辨率是640×480,老闆的是800×600的,結果數組溢出。。。。。。。


4 寫了2個preparestatement,一頓addbatch,然而最後只寫了一個preparestatement.executeBatch();找了n長時間纔看到問題所在。

5 三層架構裏面的業務邏輯層比如:

 

public bool Add(hLink.Model.FavoriteInfo model) {   
  return dal.Add(model) > 0;   
}  
public bool Add(hLink.Model.FavoriteInfo model) {
  return dal.Add(model) > 0;
}
寫成了

 

public bool Add(hLink.Model.FavoriteInfo model) {  
  return Add(model) > 0;   
}  
public bool Add(hLink.Model.FavoriteInfo model) {
  return Add(model) > 0;
}
還好碰到了一次,以後報stackoverflow...異常就知道什麼錯了,呵呵、

6 struct CXTEST_DAT
{
...
WORD wLen;
...
}
int TestData(..., DWORD dwLen);
使用時:
CXTEST_DAT stData;
TestData(..., stData.wLen);
自動擴展爲DWORD後,長度總是不對

7 我也經常犯低級錯誤,但我覺得並不可笑,每次發現自己犯低級錯誤後,自己的印象也更加深刻,重複犯錯的機率就小了很多。

比如,我第一次使用Java枚舉時是這樣寫:

 

/** 
 * SQLCommandType SQL命令類型枚舉 
 * @author CodingMouse 
 * @version 1.0.0.1 
 */  
public enum SQLCommandType {  
          
    /** 
     * SQL查詢數據命令 
     */  
    SELECT,  
    /** 
     * SQL插入數據命令 
     */  
    INSERT,  
    /**  
     * SQL修改數據命令  
     */  
    UPDATE,  
    /** 
     * SQL刪除數據命令 
     */  
    DELETE  
      
}  
/**
 * SQLCommandType SQL命令類型枚舉
 * @author CodingMouse
 * @version 1.0.0.1
 */
public enum SQLCommandType {
       
    /**
     * SQL查詢數據命令
     */
    SELECT,
    /**
     * SQL插入數據命令
     */
    INSERT,
    /**
     * SQL修改數據命令
     */
    UPDATE,
    /**
     * SQL刪除數據命令
     */
    DELETE
   
}


當在方法中switch傳入的枚舉參數值時:

 

switch(枚舉變量) {  
    case SQLCommandType.SELECT  
        // 中間的邏輯處理  
         break;  
    case SQLCommandType.INSERT  
        ......  
}  
switch(枚舉變量) {
    case SQLCommandType.SELECT
        // 中間的邏輯處理
         break;
    case SQLCommandType.INSERT
        ......
}

語法老報錯,卻不知道怎麼回事,明明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 嵌套循環用同一個變量:

 

int i=0;  
while(i<10){  
  for(i=0;i<5;i++){  
    ....  
  }  
}  
int i=0;
while(i<10){
  for(i=0;i<5;i++){
    ....
  }
}


27 印象最深刻的就是c#的一個循環
if後面忘加{}

調了一個下午

28 引用窗體類指針是直接定義頭文件用 沒有在App中存放 造成指針不一樣,調不出相應成員(VC)


29

 

Sring date  = request.getParameter("date");   
    
 if(!"".equals("date")){   
     .....   
 }   
    
 ........   
Sring date  = request.getParameter("date");
 
 if(!"".equals("date")){
     .....
 }
 
 ........

最低級的錯誤......
老紫竹備註:我也犯過多次,習慣的就把雙引號加上去了

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。。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章