![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
88andrey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
Я знаю что оператор new возврашяет NULL если не находит память, что мне делать в этой ситуации, закрывать программу ?
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Это из чего следует? По умолчанию new вызывает исключение при нехватке памяти. А вот что с этим делать - тут все в руках программиста. Смотря где, что будет и чего не будет и т.п. Если, например, нехватает памяти для загрузки картинки - зачем закрывать приложение? Достаточно написать "Файл слишком большой" и предложить выбрать другой. |
|||
|
||||
88andrey |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
если не хватает память для массива
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Перехватывать std::bad_aloc и думай, что делать
![]() |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Anikmar, да, так и есть -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, ты по поводу исключений? Ты уверен? По-моему так только будет, если будем вызывать new с throw() ... или нет? В противном случае там просто мусор будет (даже если предварительно ты обнулил указатель.
Это сообщение отредактировал(а) Xenon - 21.4.2007, 14:31 |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Ну не всегда, например, на borland c++ 3.1 результат оператора new надо проверять с применением if (!pointer) {...} а в остальном все так - если невозможно выделать память под жизненно важные переменные программы, то ее надо завершать уведомив пользователя о причинах/возможных путях решения проблемы |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
По поводу того, что new возвращает NULL, если память выделить не удалось. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, так это если только вызывать new не выбрасывающий сключений. В противном случае мусор должен быть в указателе
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Пишешь под win32?
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Так он по умолчанию такой и есть. Впрочем это уже (возможно) бкдет зависет от среды и используемых библиотек. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, разве? По-моему умолчанию как раз-таки кидающий исключения.
|
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
так оно и есть, исключая старые компиляторы |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
Да было уже обсуждение что по умолчанию new делать должен.
По стандарту: Просто new - выбрасывает исключение Если писать new nothrow (по моему так, точно не помню) то тогда при ошибке вернет NULL Эта тема уже поднималась. А то что старые компиляторы не придерживаются стандарта - так может на тот момент его (стандарта) не было. Надо смотреть документацию по компилятору. А если писать по стандарту - то должно быть исключение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |