问题描述:如下代码,
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {};
for (int i = 0; i < vec.size() - 1; ++i) {
cout << "i = " << i << ", vec[i] = " << vec[i] << endl;
}
return 0;
}
运行,系统报Segmentation Fault。
调试代码如下,
根因分析如下:
vector的size()方法返回的size_t类型,size_t是无符号整数类型,它的范围取决于编译器和操作系统的位数。在大多数平台上,size_t的范围通常是0到4294967295(32位操作系统)或0到18446744073709551615(64位操作系统)。
解决方法1:将i < vec.size() - 1
修改为i + 1 < vec.size()
。
解决方法2:先定义整型变量int n = vec.size();
然后将i < vec.size() - 1
修改为i < n - 1
。