Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 20:48   #1
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
Вопрос Освобождение памяти после исключения

Возник вопрос: следует ли использовать delete после неудачного выделения памяти? К примеру, какой код более грамотен:
Код 1
Код:
char *pdata = 0;
try
{
   pdata = new char[~0U/2];
   cout << "Memory allocated!";
}
catch (const bad_alloc &exc)
{
   cout << "Can't allocate memory. Problem: " << exc.what() << endl;
}
delete [] pdata;
Код 2
Код:
char *pdata = 0;
try
{
   pdata = new char[~0U/2];
   cout << "Memory allocated!";
   delete [] pdata;
}
catch (const bad_alloc &exc)
{
   cout << "Can't allocate memory. Problem: " << exc.what() << endl;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 27.05.2011, 22:17   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
Возник вопрос: следует ли использовать delete после неудачного выделения памяти?
Нет --------------------------------------
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 27.05.2011, 22:30   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нельзя сказать ни да ни нет, зависит от настроек компилятора(не помню что за параметр и у всех ли компилей)
обычно включено авто освобождение памяти, но можно и отключить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.05.2011, 22:35   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
нельзя сказать ни да ни нет, зависит от настроек компилятора(не помню что за параметр и у всех ли компилей)
обычно включено авто освобождение памяти, но можно и отключить.
Что за авто освобождение памяти? Нет в C++ по стандарту такого.
Ну а если память не выделена, то и освобождать нечего
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 27.05.2011, 22:36   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Обнаружил, что у меня после исключения в указателе NULL, значит освобождать не следует, а значит и обломков там не должно быть.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 27.05.2011, 22:38   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Нет в C++ по стандарту такого.
Однозначно, но кто угодно может забацать, что угодно.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 27.05.2011, 22:42   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
Однозначно, но кто угодно может забацать, что угодно.
А нечего пользоваться тем что "кто-угодно" "забацал"
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 28.05.2011, 00:00   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

Syuf

следует ли использовать delete после неудачного выделения памяти?

если выделение памяти прошло неудачно, то что именно ты собрался освобождать?

К примеру, какой код более грамотен:

из представленного - никакой.
грамотный, а не быдло-код использует идиому RAII и смарт-поинтеры.
Rififi вне форума Ответить с цитированием
Старый 28.05.2011, 02:58   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Что за авто освобождение памяти? Нет в C++ по стандарту такого.
Ну а если память не выделена, то и освобождать нечего
не забываем еще про исключения в конструкторе.
там то память уже есть.

правда я чтото не доглядел что речь именно про невозможность выделения памяти, там да, не выделится ничего.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.05.2011, 11:04   #10
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
не забываем еще про исключения в конструкторе.
там то память уже есть.
Когда генерируется исключение - гарантируется что будут вызваны деструкторы всех созданных объектов.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение памяти AlexandrSid Общие вопросы Delphi 3 02.02.2009 13:45
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36