Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 93
1

Генерация Bad_alloc и состояние программы

18.06.2020, 11:08. Показов 953. Ответов 9

Author24 — интернет-сервис помощи студентам
Здравствуйте! Возник вопрос, связанный с генерацией bad_alloc. Меня интересует, что будет, если при выделение памяти под массив, например, мы схватываем ошибку выделения памяти. Как будет меняться состояние объекта с точки зрения обеспечения стогой гарантии безопасности? Что будет записано в указатель ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2020, 11:08
Ответы с готовыми решениями:

Генерация исключения bad_alloc в new
Прочитал, что в случае невозможности выделения памяти new возвращает 0, либо генерит bad_alloc....

Ошибка 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
Помогите найти ошибку Вот код#include<cstdio> #include<iostream> #include<conio.h> #include...

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

9
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
18.06.2020, 11:12 2
Цитата Сообщение от Novichekk Посмотреть сообщение
Меня интересует, что будет, если при выделение памяти под массив, например, мы схватываем ошибку выделения памяти. Как будет меняться состояние объекта с точки зрения обеспечения стогой гарантии безопасности? Что будет записано в указатель ?
Состояние объекта должно остаться прежним.
1
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
18.06.2020, 11:14 3
Цитата Сообщение от Novichekk Посмотреть сообщение
Как будет меняться состояние объекта
Какого объекта?

Цитата Сообщение от Novichekk Посмотреть сообщение
Что будет записано в указатель ?
В какой указатель? Вы же сами сказали - выброшено исключение bad_alloc. То есть ни до какого "записывания в указатель" дело не дошло вообще.
1
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 93
18.06.2020, 11:15  [ТС] 4
я имел в виду то такое
int* temp = new int[100000];
size_++;
конечно, все это в блоке try
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
18.06.2020, 11:17 5
Цитата Сообщение от Novichekk Посмотреть сообщение
я имел в виду то такое
int* temp = new int[100000];
size_++;
конечно, все это в блоке try
И?

Если при выделении памяти будет выброшено исключение, то управление перейдет в обработчик исключения. Где уже не будет никакого указателя. О каком "указателе" вы ведете речь? О каком "объекте"?
1
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 93
18.06.2020, 11:59  [ТС] 6
речь шла о том, что будет записано в указатель temp и поменяется ли в результате такого случая его значения. Из ваших ответов я понял, что значение не изменится и гарантии безопасности будут соблюдены, я верно вас понял?
0
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
18.06.2020, 12:08 7
Цитата Сообщение от Novichekk Посмотреть сообщение
речь шла о том, что будет записано в указатель temp
Ничего.

Цитата Сообщение от Novichekk Посмотреть сообщение
поменяется ли в результате такого случая его значения
Указатель temp даже создан не будет. Т.е. говорить о каком-либо значении бессмысленно.
1
2 / 1 / 1
Регистрация: 22.12.2019
Сообщений: 93
18.06.2020, 12:13  [ТС] 8
Хорошо, понял вас

Добавлено через 26 секунд
Всех, кто помог, благодарю за ответы
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
18.06.2020, 13:37 9
Цитата Сообщение от Novichekk Посмотреть сообщение
речь шла о том, что будет записано в указатель temp и поменяется ли в результате такого случая его значения. Из ваших ответов я понял, что значение не изменится и гарантии безопасности будут соблюдены, я верно вас понял?
В указатель temp ничего записано не будет. Но сам вопрос о значении указателя temp бессмыслен, ибо к моменту начала выполнения обработчика исключения этот указателя уже перестанет существовать. Он же объявлен у вас локально в try-блоке. Нет никакого смысла говорить о значении несуществующего указателя.

Если вы имели на уме какой-то другой пример - то приводите его. Пока что мы вели речь именно о том примере, который вы привели выше.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.06.2020, 13:53 10
Что бы говорить вообще о указателе он должен быть объявлен вне блока try catch

C++
1
2
3
4
5
6
7
8
9
10
int* temp;
try
{
  temp = new int[100000];
  size_++;
}
catch(const std::exception& e)
{
 //
}
1
18.06.2020, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2020, 13:53
Помогаю со студенческими работами здесь

Ошибка 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
Добрый день!Работаю с графами,и при больших значениях столкнулся с проблемой:ошибка в тесте...

bad_alloc или bad_alloc()
Здравия желаю!:) Хотелось бы узнать, какая разница между throw bad_alloc; и throw bad_alloc();....

Автоматическая генерация кода программы на основе программы на другом языке программирования
Где может приминяться?Зачем она нужна? И как её примерно делать, не имею представления, спасибо

Как сохранить состояние программы
Программа производит длительные вычисления и параллельно записывает результаты в базу. Как проще...

Возврат программы в начальное состояние
Суть такова: программа использует коллекции List, таблицы, и распределяет нужным образом при...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru