编译器显示:中止调用
Compiler Shows: Abort Called
C++程序何时抛出此错误消息:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)
Aborted (core dumped)
我正在网站上尝试算法问题。 我的职能是:
int stringSimilarity(string s)
{
int size=s.size(), sum=0;
for(int i=0; i<size; i++)
{
string sub_str; int temp_sum=0;
//Creating a substring for comparison
for(int j=i, l=0; j<size, l<size-i; j++, l++)
{
sub_str.at(l)=s.at(j);
}
if(sub_str.at(0)==s.at(0))
{
temp_sum++;
int k=1;
while(sub_str.at(k)==s.at(k))
{
temp_sum++;
k++;
}
}
sum=sum+temp_sum;
}
return sum;
}
在运行示例测试用例时,我收到了上面显示的错误消息。有人可以告诉我我哪里出错了吗?
编辑:把问题说到点子上。在最初的问题中,我问过为什么我的程序没有编译。但正如许多人指出的那样,这不是编译错误,而是程序抛出的运行时错误。
来自 std::string::at(( 的文档
该函数自动检查 pos 是否是 的有效位置 字符串中的字符(即 POS 是否小于字符串 长度(,如果不是,则抛出out_of_range异常。
在这里,sub_str
是一个空字符串(长度为 0(,但您尝试在内部循环的第一行访问它:
sub_str.at(l)=s.at(j);
克服它的一种方法是初始化字符串以具有相同的s
长度,并就地编辑它。
我在HackerRank上做代码时遇到了同样的问题,所以让我告诉你我的错误是什么:
我正在接受一个额外的输入,该输入在测试用例中未提及,因此当我删除该输入时,我的问题得到了解决。
程序说用户将给出两个查询,我必须处理这些查询,但我也在获取查询号码。
就像
CIN>>查询;
然后我采取了 2 个查询 q1 和 q1,所以在运行时编译器说中止调用,当我删除这个(cin>>查询;(行时,我的程序工作正常。
相关文章:
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 当我在libtorrent上调用dht_get_item时,警报显示该项目未初始化
- 使用 Node.js N-API 调用 C 函数时,不会显示预期的输出
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 在gdb中显示当前函数的调用函数
- 调用堆栈显示 SIGBUS,这意味着什么
- 写入渲染缓冲区并使用单个渲染调用使用 OpenGL 显示
- 编译器显示:中止调用
- FFMPEG:为什么当我调用av_codec_next()时,我所有的编解码器都没有显示出来
- 从C++调用网络摄像头并在 Python 中显示图像
- 打开C++故障转储不会在调用堆栈中显示正确的行
- OpenGL -- 多个 glDrawArrays() 调用仅显示第一个的结果
- std::tie 在从函数调用传递值时失败,并显示"无法绑定非常量左值引用"
- 显示 matlab 程序的输出,调用另一个 C++ 程序
- 如何创建跟踪以显示存在递归的调用顺序
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 在 CUDA 中,Nsight 不会在时间轴中显示 cuInit(0) 调用
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- c++:几乎相同的输入,但第二次调用显示段故障