Ошибка при работе с вектором std::bad_alloc

138
07 мая 2019, 08:30
int main()
{
    SetConsoleOutputCP(1251);
    time_t start, finish, res;
    start = clock();
    vector<double>c;
    const int Size = 100000000;
    for (int i = 0; i < Size; ++i)
    {
        c.push_back(0.5);
    }
    finish = clock();
    res = finish - start;
    cout << res;
    cin.get();
}

Из-за чего такая ошибка? И как её исправить?

Answer 1

Ну, получается, что вы запрашиваете 100000000*8 байт памяти, т.е. примерно под 800МБайт памяти. С учетом того, что вектор обычно запрашивает лишнее - очень может быть, что затребованы где-то полтора гигабайта...

Варианты - первый - зарезервировать память сразу, добавив перед циклом c.reserve(Size); - тогда вы ограничитесь 800 Мбайтами но будете мерить не совсем ту эффективность - без выделения памяти; второй - уменьшить раз в 10 количество элементов, и выполнить ваши действия с созданием и заполнением (и уничтожением) вектора в цикле 10 раз, ну, или третий - создавать 64-разрядное приложение...

READ ALSO
Почему возникает ошибки при установки java-alternatives?

Почему возникает ошибки при установки java-alternatives?

Хочу что бы JDK11 был выбран, по умолчанию, вручнуюВвожу команду:

150
AudioManager.OnAudioFocusChangeListener [закрыт]

AudioManager.OnAudioFocusChangeListener [закрыт]

Встретил такой Андроид код:

158
PriorityQueue - в классе объявлены избыточные конструкторы?

PriorityQueue - в классе объявлены избыточные конструкторы?

В классе PriorityQueue определен конструктор, который принимает аргументом CollectionВ этом конструкторе имеется проверка аргумента на соответствие...

162