小白最近在學習c++,理解了基本語法後,開始對書本中的例題和試題進行上機練習,在上機過程中,發現自己犯了越來越多的令人**的超級低階錯誤,先備案在此,再犯每天多練10道上機題,累死你!
1. 忘掉載入標準庫:using namespace std;
2014-04-25 小白今天花了乙個多小時在修復乙個bug,一直沒有修復成功,直到陰差陽差的把之前的**揪出來對照了一下,才出現小白居然又少寫了「using namespace std;」,這個問題已造成小白推翻了好多定理,比如說:microsoft的visual studio 2008原來是這麼挫,連string型別的都沒辦法定義!相關的atoi,c_str()函式都用不了,謹以記載,一切大問題追根溯源都是令人面紅耳赤的小失誤!
2. 宣告變數後,忘記初始化就開始進行運算;
2014.04.27今天犯了兩次這個錯誤,花了大概2個小時才查詢出原因,尼瑪,姐姐怒了!!
3. 將main宣告為int型,但是在main函式裡最後卻沒有return 0;
4. 居然在**中寫出(b*b-4ac)這種悲劇,應該是(b*b-4*a*c),高估計算語言的智慧型性!
5. 無數次在語句的後面忘掉分號;
6. exit 0編譯系統不認可,exit (0)才可以編譯通過。
7. for(i=0;i<=11;i++)這個迴圈語句執行完之後,i的值為12,不為11。
8.寫**時經常忽略掉對異樣場景的處理,比如對輸入範圍,特殊字元的檢查,這顯示了我這個菜鳥在c++發展上的侷限和狹隘,若不改正,未來必為此受重創!
9. 在**中不要留只定義但沒有用到的變數,否則會報錯:'min1' : unreferenced local variable(min1只定義了,但**中卻沒沒有使用)
10. 迴圈語句中注意迴圈的次數,尤其確保第一次執行相關引數值和流程以及最後一次執行的相關引數和流程。如:int i=1; while(i<=2);必須將定義和賦值乙個語句完成:int b[10]=;
16. 宣告乙個二維陣列時,必須寫出它的列數,否則編譯不通過。例如:int max(array[ ] [ ]), max(array [ 3] [ ]),max(array [ ] [4] )中,只有max(array [ ] [4] )是編譯通過的!
17. 初始化字元陣列:char a[ ] [ 2 ]= , },報錯:error c2137: empty character constant,解決方案:char a[ ] [ 2 ]= , 就可以了,字元初始化,想要初始化為空字元,不能是' ',加上\0,變成' \0 '就可以了。
18. 全域性變數在使用過程中,只要在程式執行過程中改變了它的值,那麼它每一瞬的值就需要仔細分析,尤其是和迴圈語句結合使用的時候。
19. 在**中不寫注釋,導致回頭檢視**的時候,自己都不認識自己的**到底是用於什麼功能。
20. 對字串的賦值不能用賦值號(除非是string型別),否則必須使用字串處理函式strcpy,同時區分字元是不需要如此麻煩的,直接賦值即可。
21. 在visual c++編譯器中對於二維字元陣列的初始化(如:char name[ 3 ] [ 30 ])不能使用cin>>a [ i ] ,但可以使用 gets(a [ i ] )。
22. 在主函式main中最後一行return 0;之前經常忽略掉一句話:cout<23. 在字元的二維陣列裡如:a[ 3 ] [ 5 ]表示有3行,每一行有5個元素,但是每一行的預設最後乙個元素為' \ 0 ',而' \ 0 '也是算計在5個元素之內的,故字元陣列a[ 3 ] [ 5 ]每行實際有效的字元只有4個。
24. 定義乙個引用時,在定義階段就必須初始化,如:int &b=a;不能分兩個階段如:int b; &b=a;
25. 對於一定功能的**裡的for(表示式1; 表示式2 ; 表示式3)中的每乙個表示式的大小,範圍,極限值,邏輯性,變數名都需要確認無誤,減少除錯時的各種粗心的,邏輯上的錯誤。
26. 小白今天又定義了乙個函式名叫function,呃。。。蛇精病犯了~
27. 這幾天總是會犯在for ( i=0; j<5 ; i++ )這樣會導致死迴圈的致命細節錯誤!
28. 定義乙個char *p; sting a=" xiao bai ";想要p指向字串,應該是 p=&a [ 0 ] ; 這個很容易在傳引數的時候出錯。
29. 定義乙個int *p,又定義個a [ 5 ] [ 5 ],想要p指向二維陣列,應該是p=& a [ 0 ] [ 0 ];
30. 定義完乙個結構體之後不能少分號;,否則編譯時會有一大堆錯誤。struct date ;
31. do while() ;語句的最後有乙個分號!
32. 建立鍊錶時,p->next是個null,然後小白很神經的寫了個:cout不然編譯會報:cannot open include file: 'student.h': no such file or directory
因為<>代表在系統標頭檔案的目錄裡,而「 」代表在當前目錄下!
34. 在乙個類中,若有乙個以上的成員函式,那麼這些成員函式體裡的變數是區域性變數,不能相互呼叫!
35. 在定義類的成員函式時,若是在類體外定義,總是少類名,比如:void set_time() ,其實應該是void time::set_time(); !
36. 在cout37. 定義類時,居然忘了將引數初始化的建構函式的編寫!
38. 居然在main函式中又定義了乙個函式,然後呼叫,這是抽風了!
39. 小白的這個問題已經不知道犯了多少次,總是區分不開bool型別中true是0還是1,總是將c++和shell混淆,現歃帖為誓,bool中的true為1,false為0,這種現象跟shell中命令返回值是完全相反的。
41. 在多成派生中,小白呼叫基類的display()函式時,居然用void display()方式,怪不得輸出結果總是少那麼幾個,呼叫形式display()這樣就可以了~
42. student是乙個類名,stu是student類的物件,student *p=&stu而不是student *p=stu,小白將陣列,函式名稱即為首位址套在這裡,是極大的錯誤。
43. 宣告了乙個虛基類shape,其中:virtual float area() const 但是小白在派生類中重新定義area()時卻錯誤地寫成: float area(), 這裡會導致shape *p指標指向派生類物件時,p-> area()會直接為派生類的預設構造函式引數形成的area結果,一般是:c(0,0,0)中引數構成的area()計算結果,而不是派生類物件定義時原本的:如c(1,2,3)的結果.
2014-07-14
44. 時隔3個月的小白再看寫的這篇錯誤小結,很有成就感的同時,倍感自己有些方面描述不清,回頭看時不能把握住當時的自己在什麼情景下發生的什麼的錯誤,事實上應該是什麼樣,而且為什麼會發生這樣的錯誤,圍繞著這幾個問題,這個小結還有很多不足之處,現記錄一下,3個月後的小白看此小結糾結的心情。
45. 在敲**的過程中,小白把意義不同的變數張冠李戴,結果,程式出現奔潰,小白在乙個偌大的for迴圈裡尋尋覓覓,不停的debug,一步一步的檢視結果,懷疑自己寫的每乙個函式,當癥結找到的時候,捅死自己的心情都有,故立帖為誓,關於變數出現的地方要著重的注意。(之前犯的定義變數不初始化,現在已經基本改正,這是乙個好現象,好記性不如爛鍵盤)~
45. 在main()定義了乙個flag的變數,然後小白居然腦抽的想要在其他函式中使用flag的當前值,迷糊了兩個概念:1. main()函式也是函式,裡面的變數的作用域不做特殊說明只能是main函式體中 2. 若想要在乙個函式中使用另乙個函式處理過的變數,可以將這個變數(如flag)設定為全域性變數,全域性變數的設定是在所有函式體之外。
46.小白在2014-07-16 23:27 憤怒的看著以前寫的**,本想藉著**好好重溫一下基礎知識,怎奈乙個cpp檔案開啟無功能介紹,無變數說明,無注釋,只能淺淺的瞥一下**,當初我寫他們的時候,幾乎每乙個cpp都有錯誤,現在看著完好的一片,我無法肯定下次我不會犯當時的錯誤,或者我現在的思路會比得上之前的,總之,對於**的閱讀性,小白必須改正,乙個自己都不願意好好看的**有什麼前途!
Shader程式設計最容易犯的低階錯誤
shader程式設計最容易犯的低階錯誤 日期 2007 1 16 來自 http blog.csdn.net cywater2000 前段時間本人一直在用 shader 寫程式,看似簡單,結果發現經常犯低階錯誤。由於除錯 shader 比較麻煩,特別是 pixel shader 簡稱ps 所以有時候...
jtabel新增資料時犯的低階錯誤
jtable新增資料,老是新增的不對,如下圖 最後發現時讀取的資料拆分不正確,是特殊字元,不能作為regx拆分string,所以split 不起作用 還有變數的作用域也很特別,如下 while str bfr.readline null vector rowdata new vector syste...
自己犯的一些低階錯誤整理
1 switch漏寫break case panel roleandsetting break default break 由於漏寫 處的break導致執行到case panel roleandsetting時 curlayer null,進而導致沒有layer被顯示。2 英文拼錯,不多說直接看下圖...