|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.12.2016, 16:29 | #11 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Ну если так рассуждать, есть функции проверки хипа - можно проверить является ли данная память выделенной или нет. Другое дело, что дело это неспешное и недокументериванное. Если использовать свои malloc/new то вообще плевое дело такую проверку сделать...
А смысл... проще инициализировать переменные |
09.12.2016, 18:56 | #12 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
new может ничего не сообщить, а ошибка произойдет непосредственно при обращении к памяти. Таковы реалии. Другими словами, уберечься от подобных ошибок просто нельзя. Система может просто сказать что всё хорошо и new завершиться вполне успешно. Но потом нас ждет крах при определенных условиях. Кстати, этот момент, емнип, также описан у Мейерса... или у Саттера (), не помню уже. Последний раз редактировалось Croessmah; 09.12.2016 в 20:51. |
|
09.12.2016, 19:36 | #13 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Даже стало интересно у кого именно это описано.
У Герба Саттера в книге "Новые сложные задачи на C++". Задача 23, вопрос 3 (для профессионалов): "Опишите реальные ситуации - в пределах стандарта C++ или вне его - когда проверка исчерпания памяти невозможна или бесполезна". Ответ на этот приложу в скриншотах: Безымянный_01.jpg Безымянный_02.jpg Безымянный_03.jpg Безымянный_04.jpg Безымянный_05.jpg Безымянный_06.jpg Последний раз редактировалось Croessmah; 09.12.2016 в 20:05. |
09.12.2016, 22:52 | #14 | |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
Цитата:
Если мы подозреваем, что в некоторой ситуации может предполагаться ошибка выделения памяти - контролируйте исключения при new и при (хотя бы 1-м) обращении к объекту. |
|
09.12.2016, 23:16 | #15 | ||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Никакого исключения не будет. Система будет ждать обращения к памяти. Яркий пример - Ubuntu с дефолтными настройками. Цитата:
Так что программа тупо упадет без всяких исключений. Хотя платформозависимыми средствами можно поймать ошибку, это выходит за рамки возможностей стандартных средств языка C++. Поэтому, используя стандартные средства C++, контролировать это не получится. Да и в случае падения мы не сможем ничего толком сделать. Разве что сохранить какие-то данные о состоянии программы в момент падения. Код:
Последний раз редактировалось Croessmah; 09.12.2016 в 23:35. |
||
10.12.2016, 10:00 | #16 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Либо это дикое нарушение стандарта, либо вы скомпилировали свой код с настройками, запрещающими выкидывать exception в данной ситуации. В таком случае сами должны проверять на предмет p == 0.
Последний раз редактировалось waleri; 10.12.2016 в 10:03. |
10.12.2016, 13:26 | #17 | |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
Цитата:
Код:
Код:
|
|
10.12.2016, 16:10 | #18 | |||
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Вы читали пост выше? Там об этом сказано.
Цитата:
Цитата:
Тем более, new может вернуть не ноль, но в результате крах по тем же причинам. Цитата:
Как доберусь до заданной машины - покажу. Еще раз - диагностировать ошибку выделения памяти может быть невозможно до момента непосредственного обращения. Причины описаны в постах выше. Последний раз редактировалось Croessmah; 10.12.2016 в 16:14. |
|||
10.12.2016, 16:22 | #19 |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
А медленно?
Саттер, Александреску и пр. очень часто любят рассуждать умозрительно, теоретически ... но к поведению реальных операционных систем это, порой, имеет слабое отношение... |
10.12.2016, 16:24 | #20 |
Заблокирован
Регистрация: 29.11.2016
Сообщений: 215
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
массив Указатель на указатель | fr0st1k123 | Общие вопросы C/C++ | 3 | 27.12.2015 18:06 |
нужно написать программу в с++. определить длину строки и определить сколько раз встречается буква П в строке. | chit | Помощь студентам | 4 | 11.07.2015 14:03 |
Передать указатель на указатель в функцию | erro | Общие вопросы C/C++ | 3 | 29.10.2012 17:59 |
Определить сколько знаков в числе, вычислить сумму цифр и определить старшую цифру | Blombox | Помощь студентам | 5 | 25.04.2011 15:52 |
Среди 20 введёных чисел определить чётные, распечатать их, определить min | Spade | Помощь студентам | 4 | 15.06.2008 18:39 |