抛出实例'std::out_of_range'后调用的终止
Termination called after throwing an instance 'std::out_of_range'
>它们是运行时错误'out_of_range'。当我使用 i>0 时它有效,但如果我这样做,我的第一个字符不会添加到我的字符串中。
int main(){
string str;
string strR;
short count {0};
getline(cin,str);
int n=str.length();
for(size_t i=n-1;i>=0;i--)
strR.push_back(str.at(i));
if(str==strR)
cout<<"Yesn";
else
cout<<"Non";
return 0;
}
对于类型size_t
的i
,条件i >= 0
总是为真。i
为零后,发生负溢出,i
变成一个大数字。 然后str.at(i)
自然而然地投掷。
非常简单的更正:
for (size_t i = n; i > 0; i--)
strR.push_back(str.at(i - 1));
或者,也可以对i
使用带符号类型,例如int
。但是,对于非常大的字符串,这可能会中断。我不会在生产代码中使用它。
顺便说一句,要检查字符串是否是回文,您无需复制它。更简单、更快速的只是遍历字符串的一半并比较后半部分的相应字符。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- 在字符串函数中抛出'char const*'实例后调用的终止
- 调用 raise(signal) 会终止 c++ 程序
- 在抛出 what() 的实例后调用'std::logic_error'终止:basic_string::_M_construct 空无效
- 抛出实例'std::out_of_range'后调用的终止
- 程序终止时调用函数
- 在抛出 'std::regex_error' 的实例后调用终止 what(): 括号未关闭
- 在抛出 'std::invalid_argument' 的实例后调用终止 what(): stoi 错误 in leet
- CPP-Netlib 问题,在抛出 'boost::exception_detail::clone_impl 的实例后调用终止
- 如何使用管理权限调用终止进程
- 在抛出 'std::bad_alloc' 的实例后调用终止 what(): std::bad_alloc 中止
- 在抛出 'std::bad _alloc' 的实例后调用终止 what(): std::bad_alloc 在 c++ 中
- 的实例抛出后调用终止
- 在没有活动异常的情况下调用c++终止
- 内存管理 - C++错误:抛出"std::bad_alloc"实例后调用终止
- 代码调用终止而不是引发异常