Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
DmitryM5
Love~
52 / 52 / 23
Регистрация: 27.08.2013
Сообщений: 940
Записей в блоге: 1
#1

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

02.11.2014, 15:43. Просмотров 6408. Ответов 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?
http://www.cyberforum.ru/cpp-beginners/thread1393500.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2014, 15:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc (C++):

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

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

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

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

Terminate called after throwing an instance of 'int' Aborted -Ошибка, как быть?
Здравствуйте! Выдается такая ошибка, не понимаю почему. terminate called...

9
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 16:01 #2
Стандартные контейнеры из STL специально разработаны так что бы вручную не выдельть и не освобождать память под них. Все это они делают сами.
0
DmitryM5
Love~
52 / 52 / 23
Регистрация: 27.08.2013
Сообщений: 940
Записей в блоге: 1
02.11.2014, 16:16  [ТС] #3
Цитата Сообщение от DiffEreD Посмотреть сообщение
Стандартные контейнеры из STL специально разработаны так что бы вручную не выдельть и не освобождать память под них. Все это они делают сами.
То есть по вашему если вручную задать определенный размер памяти и после ненужности ее освободить,это будет менее эффективно и более медленно,чем делать pushback к примеру и не отдать память??
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.11.2014, 16:24 #4
Пример кода в студию, а там будем разшуждать.
0
DmitryM5
Love~
52 / 52 / 23
Регистрация: 27.08.2013
Сообщений: 940
Записей в блоге: 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
StackOverflow
All rights reserved.
92 / 82 / 24
Регистрация: 03.08.2013
Сообщений: 258
02.11.2014, 17:07 #6
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Корректно ли так?
А Вы проверяли? У меня, например, не работает даже для 10 элементов.
1
DiffEreD
1441 / 778 / 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
DmitryM5
Love~
52 / 52 / 23
Регистрация: 27.08.2013
Сообщений: 940
Записей в блоге: 1
02.11.2014, 17:46  [ТС] #8
Спасибо,тогда остался вопрос про ошибку
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Из за чего она происходит и как с ней бороться?
0
DiffEreD
1441 / 778 / 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
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
03.11.2014, 09:18 #10
Цитата Сообщение от DmitryM5 Посмотреть сообщение
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Обычно это исключение бросается когда не хватает памяти для выделения. Бросать его может new/new [], аллокатор, контейнер или еще кто-нибудь.
1
03.11.2014, 09:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2014, 09:18
Привет! Вот еще темы с решениями:

Ошибка при выполнении запроса к mysql (terminate called after throwing an instance of 'sql::SQLException')
Всем привет. Пишу программу - демон, выполняющую изменения в базе данных в...

Ошибка std::bad_alloc
Здравствуйте! Уже который день борюсь с этой ошибкой, но не могу понять, в чем...

Ошибка std::bad_alloc
Добрый день, возникает ошибка std::bad_alloc когда вызывается функция void...

Ошибка std::bad_alloc
Помогите. Если запускать программу с number = 6, то всё работает, а вот если...


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

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

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