Проверить указатель, переданный в функцию на валидность, также не в случае NULL
Интересно, есть ли способ проверить действительность указателя, кроме обычного
assert(NULL != ptr)
. Я пробовал следующее, чтобы намеренно вызвать "ошибку доступа", поэтому я буду предупрежден раньше, а не в последнее время, когда к указателю обращаются в каком-то вложенном коде:
#if !defined _NDEBUG || defined _DEBUG
#define _check_ptr(ptr, type) do{type x; assert(NULL != ptr); x = *ptr;}while(0)
#else
#define _check_ptr(ptr, type)
#endif
Какие-нибудь рекомендации по этой теме?
Желаемый вариант использования:
void func(int *ptr){
_check_ptr(ptr, int);
if (NULL != ptr){ // Still check in release
...
}
}
В качестве предварительного условия было бы вполне приемлемо полагаться на то, что IDE бросит меня в отладчик при ошибке доступа. В моем случае я не буду запускать отладочную сборку из командной строки или откуда-то за пределами IDE.