使用for循环编写简单C++代码时遇std::out_of_range异常问题
问题解决:
std::out_of_range 异常原因及修复 你的代码触发std::out_of_range异常,核心问题是for循环的边界条件错误:
- C++字符串的索引从0开始,长度为
word.size()的字符串,有效索引范围是0到word.size()-1。 - 你写的
i <= word.size()会让循环执行到i = word.size(),此时调用word.at(i)会访问超出字符串范围的内存,直接触发越界异常。
修复后的代码
#include <iostream> using namespace std; int main() { string word; cin >> word; cout << word.size() << endl; // 将 <= 改为 <,确保索引不越界 for (int i = 0; i < word.size(); i++) cout << word.at(i) << endl; return 0; }
补充说明
string::at()是带边界检查的成员函数,一旦索引越界就会主动抛出异常;如果用word[i]虽然不会抛异常,但属于未定义行为,可能导致程序崩溃或其他异常结果,所以边界条件必须严谨。- 调试时进入陌生代码窗口是因为异常触发后,调试器跳转到了标准库处理异常的逻辑中,只需回到自己的代码检查边界条件即可。
内容的提问来源于stack exchange,提问作者Ahmad Mansour
相关产品推荐
相关产品推荐

