递归函数中的运行时错误:在抛出 what() 的实例后调用'std::bad_alloc'终止::bad_alloc

Runtime Error in a recursive function : terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

本文关键字:bad alloc 调用 终止 std 运行时错误 递归函数 what 实例      更新时间:2024-05-09

我正在使用递归函数ans1来查找合适的字符串,但我有运行时错误:

terminate called after throwing an instance of 'std::bad_alloc'
what():  std::bad_alloc**
void ans1(vector<int>a,int x , int val,string s,int req)
{
if(x<0||val>req)
return ;
if(val==req)
{
cout<<s<<endl;
return ;
}
char c='a'+x;

ans1(a,x-1,val,s,req);
s.push_back(c);
ans1(a,x,val+a[x],s,req);

}

问题出在哪里?

您正在按值传递a!这意味着您正在为每个递归步骤创建std::vector<int>的副本。如果a很大,则会分配大量内存。将参数更改为const vector<int>& a,问题应该得到解决。

s的情况下,由于您正在修改它,所以问题更复杂。您可以使用string &s,但在递归返回时必须记住恢复旧值,以避免副作用。