Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,324
Записей в блоге: 1
1

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

02.11.2014, 15:43. Показов 40291. Ответов 9
Метки нет (Все метки)

Добрый день!Работаю с графами,и при больших значениях столкнулся с проблемой:ошибка в тесте программы на сайте такова:
C++
1
2
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Почитав,выяснил что что то с памятью не так происходит.
Вопросы таковы,как правильно сделать выделения памяти в массиве(vecor<vector<int>>),в списке смежностей (vector<list<int>>) и собственно очистить память после?
reserve лучше чем resize?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2014, 15:43
Ответы с готовыми решениями:

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc выделение памяти
Уважаемые форумчане! Работаю над программой обработки WAV файлов, но возникла такая проблема: при...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
Есть задача: Написать программу, которая считывает текст из файла и выводит его на экран, заменив...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
При выполнении программы, которая миксует функции в которых создаются типовые задачи, вылезает...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' при работе с типом std::string
Добрый вечер, при работе функции возникает ошибка terminate called after throwing an instance...

9
1454 / 791 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 16:01 2
Стандартные контейнеры из STL специально разработаны так что бы вручную не выдельть и не освобождать память под них. Все это они делают сами.
0
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,324
Записей в блоге: 1
02.11.2014, 16:16  [ТС] 3
Цитата Сообщение от DiffEreD Посмотреть сообщение
Стандартные контейнеры из STL специально разработаны так что бы вручную не выдельть и не освобождать память под них. Все это они делают сами.
То есть по вашему если вручную задать определенный размер памяти и после ненужности ее освободить,это будет менее эффективно и более медленно,чем делать pushback к примеру и не отдать память??
0
1454 / 791 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 16:24 4
Пример кода в студию, а там будем разшуждать.
0
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,324
Записей в блоге: 1
02.11.2014, 16:41  [ТС] 5
Код очень большой,и задание не из легких,вот кусок когда:
C++
1
2
3
4
5
6
7
8
vector<vector<int>> g1;
....
g1.reserve(n);
for (int i = 0; i < n; ++i) 
g1[i].reserve(n);
...
g1.clear();
...
Корректно ли так?И как лучше?
0
All rights reserved.
92 / 82 / 24
Регистрация: 03.08.2013
Сообщений: 258
02.11.2014, 17:07 6
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Корректно ли так?
А Вы проверяли? У меня, например, не работает даже для 10 элементов.
1
1454 / 791 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 17:25 7
C++
1
std::vector<std::vector<int> > v(10, std::vector<int>(10));
1
Maria ->∞
106 / 86 / 44
Регистрация: 27.08.2013
Сообщений: 1,324
Записей в блоге: 1
02.11.2014, 17:46  [ТС] 8
Спасибо,тогда остался вопрос про ошибку
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Из за чего она происходит и как с ней бороться?
0
1454 / 791 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 21:26 9
DmitryM5, ознакомся с функцией reserve, в любой книге, где затрагивается STL должно быть про нее написано.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
   std::vector<std::vector<int> > v;
   std::cout << "capacity = " << v.capacity() << ", size = " << v.size() << "\n";
   v.reserve(100);
   // элементов в контейнере нету!!!
   std::cout << "capacity = " << v.capacity() << ", size = " << v.size() << "\n";
 
   //v[0].reserve(n); // элемента здесь еще нет (v.size() == 0) - std::bad_alloc
   v.push_back({1,2,3,4,5});
   v.push_back({6,7,8,9,10});
   // в контейнере 2 элемента:
   std::cout << "capacity = " << v.capacity() << ", size = " << v.size() << "\n";
   v[0].reserve(100); // Ok
 
   return 0;
}
1
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
03.11.2014, 09:18 10
Цитата Сообщение от DmitryM5 Посмотреть сообщение
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Обычно это исключение бросается когда не хватает памяти для выделения. Бросать его может new/new [], аллокатор, контейнер или еще кто-нибудь.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2014, 09:18

Ошибка: terminate called after throwing an instance of 'std::bad_alloc'
Доброго времени суток В сурсе #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt;...

Не понимаю из-за чего выскакивает: terminate called after throwing instance of std bad_alloc
Не понимаю из-за чего выскакивает ошибка при компиляции: terminate called after throwing instance...

Runtime ошибка - terminate called after throwing an instance of 'std::out_of_range'
Пишу что-то вроде компилятора. Так как никакой литературы по созданию компилятора не читал в моём...

Ошибка при повторном запуске: terminate called after throwing an instance of 'std::ios_base::failure'
Здравствуйте, вот этот кусок кода(дан ниже) при повторном запуске программы выдает ошибку:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.