在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语句循环条件写反致使访问越界了。