Вы никогда не сможете "обработать" разыменование нулевого указателя.После того, как вы это сделаете, ваша программа больше не находится в четко определенном состоянии, и невозможно продолжать детерминистически.Единственный способ действия - terminate()
, который ОС любезно сделает от вашего имени, если вы не зарегистрировали обработчик SIGSEGV.
Слово «ошибка» имеет несколько значений, которые могут сбивать с толку: Вкл.С одной стороны, можно сказать, что функция, которая не может выполнить свою ожидаемую задачу, обнаружила «ошибку», и можно ожидать, что она сообщит об этом либо с помощью подходящего возвращаемого значения, либо с помощью исключения.Такое поведение может быть лучше названо fail .Нужно подготовить правильную программу для обработки всех возможных способов возврата функции.С другой стороны, есть ошибок программирования , которые просто приводят к неправильной или даже плохо сформированной программе.В правильной программе никогда не должно быть ошибок программирования.
Например, malloc()
может завершиться с ошибкой (если не может найти достаточно места), о чем она сообщает, возвращая нулевой указатель, но вашПрограмма будет содержать ошибку, если она разыменовывает результат malloc()
без проверки.
Вы никогда не сможете "поймать" или "обработать" ошибки программирования при дальнейшем программировании.Вместо этого правильная программа должна правильно предвидеть и обрабатывать все условия отказа функций компонентов, а рекурсивно правильно написанная функция всегда должна возвращаться четко определенным образом и соответствующим образом сигнализировать об ошибке.