1. 程式人生 > >關於演算法筆記(1)中氣泡排序的bug

關於演算法筆記(1)中氣泡排序的bug

問題的發現

近一段正在配置openGL的環境,想使用VScode作為開發環境。剛剛配置好了VScode的C++環境,使用的編譯器是Clang++,測試使用的程式碼是之前的寫的BubbleSort.cpp。很奇怪,輸出的結果只有一位數字2,在之前都是可以跑通的。問題的解決路徑很有意思,所以想記錄下來。

問題的解決的正確路徑

debug發現len的值在迴圈中一直沒有變,直到所有迴圈跑完從函式返回時變成了1。將迴圈的len變成固定數值12,輸出結果中沒有1,多了個12。判斷是len的數值和陣列中的1交換了。發現是第二層迴圈的判斷條件i>=0; 寫錯了,應該去掉等號。

真正的解決路徑

遇到之後懵了,以為是自己環境配錯了,叫了宿舍的大神幫我看看。大神用g++輸出了彙編程式碼,大致擼了一遍感覺沒有錯,但是發現len的儲存和陣列的儲存在棧中時緊挨著的。然後我就把陣列中最小的數變成了2,發現輸出了兩個數,應該是len的值被函式中的陣列操作給改寫了。然改成固定輸出12,發現少了最小的數,多了12,然後輸出ary[-1]

發現是最小的值2。確定是之前的陣列操作越界,從而發現是第二層迴圈的判斷條件錯誤。