C++ std::out_of_range 错误,当我尝试运行该程序时
C++ std::out_of_range error when I try to run the program
好的,首先,我对编程很陌生,我只读了一些东西,并且一直在研究一些欧拉项目问题,以解决概念之类的问题。但是,我今天收到一条错误消息,我无法理解,所以我想我会在这里寻求帮助!任何链接或建议不胜感激!
下面是错误消息:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr Aborted
因此,您可能有的任何建议都会很棒!如果您需要查看我的代码或有疑问,请询问!虽然我宁愿尝试理解问题,然后自己找到答案!谢谢!
编辑:好的,因为你们说你需要在这里看到代码。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int stringtoint(string s_convertee)
{
int i=0;
istringstream sin(s_convertee);
sin >> i;
return i;
}
int main()
{
string s_testnum = "233456091289474545356";
int n_maxmult = 0;
for (int i = 0; i<s_testnum.length(); i++)
{
int n_product = 1;
for (int j = i; j<(i+4); j++)
{
string s_multiplier = s_testnum.substr(j, 1);
int n_multiplier = stringtoint(s_multiplier);
n_product *= n_multiplier;
}
if (n_product>n_maxmult)
{
n_maxmult = n_product;
}
}
return 0;
}
来自 C++ substr 的参考,
如果通过的位置已经过了终点 的字符串,一个out_of_range 引发异常。
所以我的猜测是你的调用substr
的第一个参数大于字符串长度。
由于您已经发布了代码,因此您可以看到,
i
最多可以s_testnum.length()-1
,
但
j
上升到 i+4-1
= s_testnum.length()+2
.
然后,使用第一个参数 j
调用 substr
,如前所述,该参数可以比字符串长度长。所以问题来了。
正如其他答案已经指出的那样,在substr
如果传递的位置超过字符串的末尾,则会引发out_of_range异常。
在您的代码中:
for (int j = i; j<(i+4); j++)
当i
1
小于s_testnum.length()
j
超过s_testnum.length()
时,当您这样做时,s_testnum.substr(j, 1);
会导致out_of_range异常。
请发布您的代码。您可能做了以下操作:
std::string s("foo");
s.substr(5, 1); // The length of the string is 3, 5 is out of bounds
您使用无效参数调用substr
- 您正在尝试获取不存在的字符串元素 - 例如,当字符串只有 5 个字符时,尝试获取第 10 个字符。
在您的情况下,这是由substr
引起的 - 您正在尝试获取一个子字符串,该子字符串对于指向的起始位置来说太长了,并且它"走出"了真正的字符串。
terminate called after throwing an instance of 'std::out_of_range'
^^^^说,你有一个未被抓住的例外,那就是out_of_range
what(): basic_string::substr Aborted
^^^^ 这是例外的文本 - 注意substr
很可能是您在代码中的某个字符串上调用的substr
函数的参数超过了字符串长度。因此std::out_of_range
例外。但是不看代码很难说。此外,您可以单步执行代码并使用 gdb/ddd 等调试器自行调试。只要确保在 g++ 上使用 -g 标志编译代码即可。
您应该能够安排调试器在引发异常时中断。 在调试器下运行程序,设置适当的断点,并查看堆栈回溯。 (作为记录,Ctrl+Alt+E 应打开一个对话框,其中包含 Visual Studios 中的异常处理选项;该命令catch throw
激活 gdb
下的异常断点。
- 运行程序时出现问题
- 分段错误当我试图运行程序时出错
- C++ 每次运行程序时我都会"nan"输出的问题
- 通过 g++ 运行程序时没有这样的文件或目录
- 重新运行程序和字符串流?
- 无法在 VS Code 上使用代码运行程序运行C++文件
- 使用有限的 RAM 运行 c++ 程序
- 继续运行程序而无需任何干预,直到要求退出为止
- 如何在每次运行程序时写入文件的下一行?
- 控制台在运行C ++程序后立即关闭(无需调试)
- 运行程序时找不到共享对象库,但在编译过程中链接了它
- 远程运行程序
- 在 Heroku 上运行 C++ 程序
- 如何在Powershell中运行C++程序,就像CMD一样?
- 为什么与Java和Python相比,使用Cmake运行C++程序每次都需要这么长时间?
- C++随机数生成器通常在 Visual Studio 中运行程序时在 2 次后停止生成数字
- 崇高文本 3 - 在终端中编译并运行 C++ 程序(路径包含空格)
- 我收到阻止我运行程序的警告,但不确定如何解决
- C++ Visual Studio 无法完全运行程序
- 在SIGABRT c ++信号之后继续运行程序