C语言 条件是冗余的,或者可能存在空指针取消引用



我为嵌入式系统编写了一个C代码,当我使用SonarQube和CppCheck插件执行代码分析时,我遇到了这个错误:

条件是多余的,或者可能存在空指针取消引用:指针。

这是有错误的代码:

ReturnCode_e SocketTcpSecureWrite( SocketHandle_t socketHandle, 
char* dataBuffer, 
uint16_t dataBufferLen, uint16_t* byteTransmitted )
{
uint32_t bytes = 0;
ReturnCode_e opResult = SSL_WRITE_ERROR;
*byteTransmitted = 0;
if( dataBuffer == NULL || byteTransmitted == NULL )
{
return WRONG_PARAMETER;
}
if( SEND_SOCKET( socketHandle, dataBuffer, dataBufferLen, 0, &bytes ) == SUCCESS )
{
*byteTransmitted = bytes;
opResult = SUCCESS;
}
return opResult;
}

我不明白为什么指针一致性检查显示为错误。 我想在执行函数之前验证指针是否为 NULL,否则返回错误。

这是检查指针一致性的正确方法吗?

我查看了代码并立即使用 PVS-Studio 进行了检查,它还发出了警告:

V595:在针对 nullptr 验证"字节传输"指针之前,使用了该指针。检查行:39、41。控制台应用程序1.cpp 39

实际上,让我们看一下这段代码片段:

*byteTransmitted = 0;
if( dataBuffer == NULL || byteTransmitted == NULL )

一开始,指针byteTransmitted被取消引用,然后才根据NULL进行验证。这是一个错误。因此,所有分析仪都抱怨它是正确的。首先验证是正确的,然后才使用指针:

if( dataBuffer == NULL || byteTransmitted == NULL )
{
return WRONG_PARAMETER;
}
*byteTransmitted = 0;

最新更新