获取错误:在抛出'std :: bad :: alloc'one():std :: bad_alloc的实例后调用terminate

时间:2018-06-01 12:53:41

标签: c++ memory error-handling segmentation-fault bad-alloc

获取错误获取错误:在抛出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

1 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样, 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

在进入循环之前检查null。这是一种很好的做法,特别是因为您将 n m 的值暴露给用户而没有任何限制或检查有效性。