首页 > 解决方案 > 取消引用后的 C++ 空测试

问题描述

我有以下 C++ 代码

   *dtcStatus = DataDTC[idxDTC].status;
    if (dtcStatus != NULL) {
        return E_OK;
    } else {
        ALOGE("Dem_GetStatusOfDTC return NULL");
        return E_NOT_OK;
    }

我的静态分析工具在取消引用后报告上述代码 Null Test 的警告

标签: c++

解决方案


我的静态分析工具在取消引用后报告上述代码 Null Test 的警告

这是您通过指针间接(取消引用)的地方:

*dtcStatus = DataDTC[idxDTC].status;

这是您测试 null 的地方:

if (dtcStatus != NULL) {

如果仔细观察,您会注意到间接在检查之前。如果程序将进入 else 分支,那么它一定是通过空指针间接地进行的,因此程序的行为是未定义的。这就是该工具会通知您此错误的原因。

有什么办法可以克服

您可以通过不这样做来克服“取消引用后测试空值”。换句话说,通过在间接之前测试 null 。只需交换这两行。


推荐阅读