Fed*_*ico 4 c pointers static-code-analysis cppcheck sonarqube
我为嵌入式系统编写了一个 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;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么指针一致性检查会显示为错误。我想在执行函数之前验证指针不为NULL,否则返回错误。
这是检查指针一致性的正确方法吗?
我查看了代码并检查了它,立即使用 PVS-Studio 并且它也发出了警告:
V595:在针对 nullptr 验证之前使用了“byteTransmitted”指针。检查行:39, 41.consoleapplication1.cpp 39
确实,让我们看看这个代码片段:
*byteTransmitted = 0;
if( dataBuffer == NULL || byteTransmitted == NULL )
Run Code Online (Sandbox Code Playgroud)
一开始,指针byteTransmitted被取消引用,然后才针对 进行验证NULL。这是一个错误。因此,所有分析器都抱怨它是正确的。首先验证然后才使用指针是正确的:
if( dataBuffer == NULL || byteTransmitted == NULL )
{
return WRONG_PARAMETER;
}
*byteTransmitted = 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3326 次 |
| 最近记录: |