在Linux下編寫C/C++程序,常常會遇到segment fault的錯誤。c++
segment fault出現有下列緣由:數組
g++編譯時加入-g選項指明在編譯的時候,產生調試信息。數據結構
g++ -g -std=c++11 3SumClosest.cpp -o 3SumClosest
指針
編譯完成後輸入調試
gdb 3SumClosest
c++11
開始調試,code
首先輸入 run
運行整個程序圖片
發現程序產生 received signal SIGSEGV, Segmentation fault
錯誤。內存
這時跟蹤錯誤,輸入get
backtrace(= bt)
能夠得出錯誤出如今 3SumClosest.cpp:18,即第18行的錯誤。
查看詳情
frame 1
這樣就定位到了問題。
class Solution { public: int twoSumClosest(vector<int>& nums, int start, int target) { int sum_min = 100000; for(int i=start+1; i++; i<nums.size()-1) { for(int j=i+1; j++; j<nums.size()) { if( abs(nums[i] + nums[j] - target) < sum_min) sum_min = nums[i] + nums[j]; } } return sum_min; } }
問題具體是由於for語句循環條件寫反致使訪問越界了。