【发布时间】:2021-05-27 14:42:25
【问题描述】:
我很想了解为什么我的 C++ 程序会产生分段错误。任务是将元素插入向量中,并将存储在该向量中的相邻元素相加。当向量中有奇数个元素时,就会出现问题。我最终通过将 idx != numbers.size() 更改为 idx
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
int main(){
vector<int> numbers = {1, 2, 3, 4, 5};
int tmp;
/*while(cin >> tmp){
numbers.push_back(tmp);
}*/
for(decltype(numbers.size()) idx = 0; idx < numbers.size(); idx+=2){
if((numbers.size() % 2 != 0) && (idx == numbers.size() - 1)){
cout << numbers[idx] << endl;
}
else{
cout << numbers[idx] + numbers[idx+1] << " ";
}
}
cout << endl;
return 0;
}
【问题讨论】:
-
numbers[idx+1]:idx + 1 == numbers.size()时的未定义行为。另外,从不写idx == numbers.size() - 1,因为空容器的情况下没有签名。请改用1 + idx == numbers.size()。 -
感谢您的回复!
-
@Bathsheba:这再次表明,a)不要对无符号值进行算术运算,b)非常不幸的是,STL 设计者将他们的 size_type 设置为无符号类型。
标签: c++ for-loop vector null segmentation-fault