Проверить указатель, переданный в функцию на валидность, также не в случае 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.

0 ответов

Другие вопросы по тегам