c++ - 取消引用后的 C++ 空测试
问题描述
我有以下 C++ 代码
*dtcStatus = DataDTC[idxDTC].status;
if (dtcStatus != NULL) {
return E_OK;
} else {
ALOGE("Dem_GetStatusOfDTC return NULL");
return E_NOT_OK;
}
我的静态分析工具在取消引用后报告上述代码 Null Test 的警告
解决方案
我的静态分析工具在取消引用后报告上述代码 Null Test 的警告
这是您通过指针间接(取消引用)的地方:
*dtcStatus = DataDTC[idxDTC].status;
这是您测试 null 的地方:
if (dtcStatus != NULL) {
如果仔细观察,您会注意到间接在检查之前。如果程序将进入 else 分支,那么它一定是通过空指针间接地进行的,因此程序的行为是未定义的。这就是该工具会通知您此错误的原因。
有什么办法可以克服
您可以通过不这样做来克服“取消引用后测试空值”。换句话说,通过在间接之前测试 null 。只需交换这两行。
推荐阅读
- javascript - 如何重置当前 useRef 的值
- android - 不同Android版本的Webview实现差异
- dolphindb - 如何清除集群的缓存?
- javascript - 如何使用 componentWillReceiveProps 模仿 useEffect?
- node.js - 嗨,是否可以使用 Node.js 在 Dialogflow 中创建实体?
- lua - 无法打开 Lua 场景 Spine 测试 Cocos2dx v4
- kubernetes - AWS ElasticIP 到 nginx 入口控制器 EKS?
- django - 从一个按钮上传多张图片
- laravel - 如何在 laravel 中使用 Request::create() 方法设置 cookie 并获得响应?
- c++ - 将对象设置为 null 是否与 C++ 中的垃圾收集相同?