Получение ошибки: завершить вызов после выброса экземпляра 'std :: bad :: alloc' what (): std :: bad_alloc - PullRequest
0 голосов
/ 01 июня 2018

Получение ошибки Получение ошибки: завершить вызов после выброса экземпляра 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 голосов
/ 01 июня 2018

Как уже отмечали другие, вероятно, проблема в том, что 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 без каких-либо ограничений или проверок на действительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...