遇到错误遇到错误:抛出std::bad_alloc
实例后终止终止what(): std::bad_alloc
#include <iostream>
#include <inttypes.h>
using namespace std;
int64_t fibonacci(int64_t n,int64_t m) {
int64_t *fibarray = new int64_t[n];
for(int64_t i=0; i<n; i++)
{
if(i<=1)
fibarray[i]=i;
else
fibarray[i]=(fibarray[i-1]+fibarray[i-2])%1000;
}
int64_t rett = (fibarray[n-1]%m);
delete []fibarray;
return rett;
}
int main() {
int64_t n=0,m=0;
cin>>n>>m;
cout<<fibonacci(n+1,m);
}
为什么在这种情况下抛出
std::bad_alloc
?我正在计算2816213588
最佳答案
正如其他人已经指出的那样,n太大可能是一个问题。
尝试更换
int64_t *fibarray = new int64_t[n];
与
int64_t *fibarray = new(nothrow) int64_t[n];
if (fibarray == nullptr) return -1; // now check for null
在进入循环之前,请检查是否为空。这是一个好习惯,特别是因为您将n和m的值暴露给用户而没有任何限制或有效性检查。
关于c++ - 出现错误: terminate called after throwing an instance of 'std::bad::alloc' what(): std::bad_alloc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50643892/