编译器显示:中止调用

Compiler Shows: Abort Called

本文关键字:调用 显示 编译器      更新时间:2023-10-16

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>>查询;(行时,我的程序工作正常。