首页 > 解决方案 > 检查传递给函数的指针的有效性,也包括非 NULL 情况

问题描述

我想知道除了 common 之外是否还有一种方法可以检查指针的有效性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 之外的某个地方运行调试构建。

标签: cpointersassertionsanity-checkfail-fast-fail-early

解决方案


推荐阅读