除了常见的
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 之外的某个地方运行调试版本。