欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 高效C/C++之七:Coverity修复问题: 打印函数切记对应类型 和 判定非空指针变量后使用

高效C/C++之七:Coverity修复问题: 打印函数切记对应类型 和 判定非空指针变量后使用

2025/5/8 10:52:44 来源:https://blog.csdn.net/zjz271674605/article/details/147632876  浏览:    关键词:高效C/C++之七:Coverity修复问题: 打印函数切记对应类型 和 判定非空指针变量后使用

【关注我,后续持续新增专题博文,谢谢!!!】

上一篇我们讲了

        这一篇我们开始讲 高效C/C++之七:Coverity修复问题:判定非空指针变量后使用 和 打印函数切记对应类型

目录

【关注我,后续持续新增专题博文,谢谢!!!】

一、背景

二、:判定非空指针变量后使用

    2.1:问题描述

    2.2 :风险及影响

    2.3 :优化建议

    2.4 :关于 NULL 和 nullptr

【关注我,后续持续新增专题博文,谢谢!!!】


一、打印函数切记对应类型

    1.1 :风险及影响

         .在处理coverity问题过程中,一半都是此问题,这个没什么好说的,按照规范处理。。

   1.2 :优化建议类型符号表

类型
含义
%d
十进制有符号整数
%ld
long int
%lld 
long long int
%u 
十进制无符号整数
%lu 
32 位无符号整数
%llu 
64 位无符号整数
%f 
浮点数
%s
字符串
%c
单个字符
%e 
指数形式的浮点数
%x, %X
无符号以十六进制表示的整数
%o
无符号以八进制表示的整数
%g
把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
%p 
输出地址符

二、:判定非空指针变量后使用

    2.1:问题描述

直接使用未判空的指针,存在空指针引用风险。

static int open(const struct hw_module_t*   pHwModuleAPI,const char*                 pCameraIdAPI,struct hw_device_t**        ppHwDeviceAPI)
{int resultOut = 0;CAMX_ENTRY_SCOPE(CamxLogGroupHAL, SCOPEEventHAL3Open);CamxResult result = CamxResultSuccess;//宏定义,如果参数是NULL,都直接returnCAMX_ASSERT(NULL != pHwModuleAPI);CAMX_ASSERT(NULL != pHwModuleAPI->id);CAMX_ASSERT(NULL != pHwModuleAPI->name);CAMX_ASSERT(NULL != pHwModuleAPI->author);CAMX_ASSERT(NULL != pHwModuleAPI->methods);CAMX_ASSERT('\0' != pCameraIdAPI[0]);CAMX_ASSERT(NULL != pCameraIdAPI);CAMX_ASSERT(NULL != ppHwDeviceAPI);//都需要判断是否NULL指针if ((NULL != pHwModuleAPI) &&(NULL != pHwModuleAPI->id) &&(NULL != pHwModuleAPI->name) &&(NULL != pHwModuleAPI->author) &&(NULL != pHwModuleAPI->methods) &&(NULL != pCameraIdAPI) &&('\0' != pCameraIdAPI[0]) &&(NULL != ppHwDeviceAPI)){

    2.2 :风险及影响

         .直接使用指针,当其为空的时候,会造成空指针应用导致程序崩溃crash。

    2.3 :优化建议

          引用指针前最好进行非空判断,判空出错也最好添加出错log,方便一步定位,切勿再应用后再做非空判段,本末倒置。        .

    2.4 :关于 NULL 和 nullptr

为什么在 C++11 中使用 nullptr?为什么 NULL 还不够?

假设有以下两个函数声明:

void func(int n);
void func(char *s);

func函数被重载,我们在调用func(NULL);会调用上面哪个函数?

func( NULL ); 

虽然看起来第二个函数会被调用,毕竟你是在传递一个看起来像指针的东西,但它确实是第一个被调用的函数!问题是因为 NULL 是 0,而 0 是整数,所以会调用第一个版本的 func。这种事情不会一直发生,但是当它发生时,会非常令人沮丧和困惑。如果你不知道发生了什么的细节,它很可能看起来像一个编译器错误。看起来像编译器错误的语言功能并不是您想要的输入空指针。

在 C++11 中,nullptr 是一个新关键字,可以用于表示 NULL 指针;换句话说,无论以前在哪里写 NULL,都应该使用 nullptr。

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词