我为嵌入式系统编写了一个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,否则我返回错误。
这是检查指针一致性的正确方法吗?
答案 0 :(得分:4)
我查看了代码并立即使用PVS-Studio进行了检查,并发出警告:
V595:' byteTransmitted'在针对nullptr进行验证之前使用了指针。检查行:39,41 .consoleapplication1.cpp 39
确实,让我们看一下这段代码:
*byteTransmitted = 0;
if( dataBuffer == NULL || byteTransmitted == NULL )
在开始时,指针byteTransmitted
被取消引用,之后才会针对NULL
进行验证。这是一个错误。所以,所有分析仪都抱怨它是正确的。首先验证是否正确,然后才使用指针:
if( dataBuffer == NULL || byteTransmitted == NULL )
{
return WRONG_PARAMETER;
}
*byteTransmitted = 0;