C++程序选中p选项打印vector内容时异常终止,是什么原因?
错误原因分析
你的程序终止是因为触发了vector的越界访问异常,两处循环逻辑都有问题:
1. while循环条件逻辑错误
你写的判断条件while (i <= numbers.at(i))完全不符合遍历需求:
numbers.at(i)取的是vector中第i位存储的元素值,不是vector的元素总数。如果你的vector长度远小于元素值,i会不断自增直到超出vector的合法索引范围。std::vector::at()会做严格的边界检查,一旦访问的索引超出[0, 容器长度-1]的合法范围,就会抛出std::out_of_range异常,未捕获的异常会直接导致程序终止。- 正确的遍历判断条件应为
i < numbers.size()。
2. 注释的for循环存在边界错误
你注释的for循环条件i <= numbers.size()同样会触发越界:
- vector的最大合法索引是
numbers.size() - 1,当i等于numbers.size()时,numbers.at(i)同样会抛出越界异常。 - 正确的for循环条件应为
i < numbers.size()。
修正后的遍历代码
cout << "[ "; // 两种写法选一种即可 // 写法1:while循环 int i = 0; while (i < numbers.size()) { cout << numbers.at(i) << ' '; i++; } // 写法2:for循环 // for (int i = 0; i < numbers.size(); i++) // cout << numbers.at(i) << ' '; cout << "]" << endl;
内容的提问来源于stack exchange,提问作者K3nNyTheOne
相关产品推荐
相关产品推荐

