0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 10
|
|||||||||||
Обработка исключений для new08.04.2010, 21:41. Показов 16348. Ответов 41
Метки нет Все метки)
(
Всем привет!
Вопрос следующий. Когда функция new не может выделить память, то генериться исключение bad_alloc. Допустим есть следующий код:
А вот другой пример:
Вопрос: как в этом случае ведет себя new и как попасть в блок catch()?
0
|
08.04.2010, 21:41 | |
Ответы с готовыми решениями:
41
Обработка исключений с пмощью структурированной обработки исключений Обработка исключений в классах для пользовательских типов Обработка исключений |
![]() ![]() |
|||||||||||
08.04.2010, 21:52 | |||||||||||
У меня срабатывает исключение такое же как и при положительном счетчике
Добавлено через 41 секунду
0
|
![]() ![]() |
||
08.04.2010, 22:17 | ||
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
08.04.2010, 22:21 | ||||||
Если соблюдать правила хорошего тона можно обойтись и без исключений пример:
Не по теме:
0
|
![]() ![]() |
|
08.04.2010, 22:23 | |
Вопрос то, как я понял не в обработке ошибок при выделении памяти, а именно в отрицательном счетчике
0
|
![]() ![]() |
|||||||
08.04.2010, 22:26 | |||||||
0
|
![]() ![]() |
|
08.04.2010, 22:32 | |
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
08.04.2010, 22:40 | ||||||
индекс для задания размера массива это извините кривые руки программиста.
1
|
![]() ![]() |
||||||
08.04.2010, 22:43 | ||||||
тьфу... точно... не досмотрел...
гляжу на первый пример с положительным счетчиком
0
|
Maniac
![]() ![]() |
||||||||||||
08.04.2010, 22:54 | ||||||||||||
![]() Решениеоператор new генерирует исключение std::bad_alloc, тоесть
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
08.04.2010, 23:10 | |
ISergey:
То что вы процитировали не я придумал а более опытные программисты... Работа с динамической памятью и указателями это работа сапера нужно быть предельно аккуратным: соблюдать правила придуманные умными людьми, а так же использовать опыт этих людей: изложенный в умных книгах.
0
|
![]() ![]() 2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
09.04.2010, 00:31 | ||||||
paramonies, видимо потому что у тебя достаточно памяти и она успешно выделяется.
Попробуй такой код:
0
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|||
09.04.2010, 11:54 | |||
Не большой итог, который я подвел для себя.
По мне так лучше не исключение а NULL обрабатывать. Только этот способ по умолчанию имеет две запарки, для моего примера надо написать оболочку new и тогда всё гарантированно будет срабатывать, а пример ISergey показывает что везде надо прописывать nothrow, как то тоже геморрой. И собственно небольшой вопрос есть ли new по умолчанию возвращающая NULL? старая добрая malloc возвращает же значение о неудачном выделении, и ни каких try catch. Может исключения и дают какие то преимущества, допустим для конструкторов и других конструкций не имеющих возврат знач, для меня исключения просто портят читаемость. Добавлено через 33 минуты Странно при обработке new хоть на NULL хоть try catch, встает вопрос и что делать в обработке, то ли закрыть программу все равно не правильно работает, либо попробовать еще раз new ,а если еще раз не удачно опять обработка(бесконечность), вообще без выделенной памяти я не вижу вообще смысла продолжать работать (всё равно вывалится ошибка runtime), или что на каждом исключении или NULL я должен разрабатывать план действий (B), который тоже ни к чему не приведет, так как за одной ошибкой может быть другая ошибка. Тогда получается зачем клиенту обрабатывать конструктор, когда в конструкторе при ошибке можно закрыть программу и вызвать причину, всё равно не чего по моему предпринять даже при обработке конструктора не возможно, тем более а если объектов на всю программу тьма а планов на всякий случай должно быть пропорционально их количеству. Да и тем более зачем клиенту информировать при ошибке в конструкторе, когда ошибка не от тебя зависит и не ты её сделал, даже информативность обработки в клиенте не поможет, допустим и что толку макросы assert точка в клиенте где произошла ошибка выделения памяти, тоже не чего не даст. Извините что не в тему но данным вопрос мне интересен. Что вообще делать если память не выделилась? Плакать или что? Добавлено через 11 минут
из new, тогда указатель инициализированный NULL после new всё равно будет NULL, ещё раз говорю не я это придумал, приводить код microsoft не буду, все равно одно и тоже. Добавлено через 6 минут
1
|
09.04.2010, 11:54 | |
Помогаю со студенческими работами здесь
20
Обработка исключений обработка исключений Обработка исключений Обработка исключений
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
|
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
|
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
|
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
|
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
|
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
|
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025
Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .
|
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
|
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
|
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
|