如何解决递归函数中的运行时错误:抛出'std :: bad_alloc'what实例后调用终止:whatstd :: bad_alloc
我正在使用递归函数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],req);
}
出什么问题了?
解决方法
您正在按值传递a
!
这意味着您将为每个递归步骤创建std::vector<int>
的副本。如果a
大,则您将分配大量内存。将参数更改为const vector<int>& a
并应解决问题。
在s
的情况下,问题要复杂得多,因为您正在对其进行修改。您可以使用string &s
,但必须记住从递归返回时恢复旧值,以免产生副作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。