Я бы не советовал пытаться обойти ошибку в чужом коде. Если вы не выполняете все, что пишете, через отладчик во время разработки кода, никакие проверки не помогут вам разобраться во всех проблемах. Заставьте их исправить свой код.
Если вы не используете отладчик, получите приличный обработчик сбоев, который выводит стек вызовов для каждого потока и как можно больше дополнительной информации о состоянии программы. Попробуйте выяснить, что может быть не так из этого.
Здесь также может помочь регулярное выполнение кода с помощью инструментов статического анализа.
Помните, что это может быть не тот, кто забывает инициализировать указатель, это может быть кто-то другой, перезаписывающий этот указатель из-за плохой записи в память, откуда-то совершенно не связанного. Существуют инструменты, которые могут помочь отследить такие вещи.
Что касается дебатов NULL Vs 0, #define NULL 0
лучше по нескольким причинам:
1) Вы можете легче видеть, когда имеете дело с указателем.
2) Использование NULL обеспечивает не меньшую или большую безопасность, чем использование 0. Так почему бы не сделать ваш код более читабельным?
3) Когда наконец выйдет C ++ 11, #define NULL nullptr
будет намного легче изменить, чем все эти нули. (Вы можете пойти другим путем и, наверное, #define nullptr 0
сегодня, но это, вероятно, вызовет проблемы в будущем, если вы будете разрабатывать кроссплатформенный код.)
И для записи, стандарт C ++ явно заявляет, что константа нулевого указателя является целочисленным типом rvalue, который оценивается как ноль. Поэтому, пожалуйста, давайте не будем больше глупости о том, что нулевые указатели не должны равняться нулю.