如何解释Cppcheck对Null指针的取消引用?

时间:2018-06-21 08:47:30

标签: c++ cppcheck

我在审阅过程中遇到了一个代码,当我使用cpp检查时,它指出了空指针取消引用错误。我不知道原因。 下面是代码:

CopyMemory(NULL, dummyMatrixManager.GetConstDataPtr(), dummyMatrixManager.GetNumberOfElements() * sizeof(tFloat)); 

void CopyMemory( tFloat* pDst, const tFloat* pSrc, const tSize nBytes )
{
    // copy data if pointer to this memory is valid
    if (NULL != pDst)
    {
        memcpy(pDst, pSrc, nBytes);
    }
    else
    {
        LOG_ERROR("No Data copied because memory was not properly allocated. Destination pointer was set to NULL.");
    }
}

谢谢

2 个答案:

答案 0 :(得分:3)

void CopyMemory( tFloat* pDst, const tFloat* pSrc, const tSize nBytes )有2个作为指针传递的参数pDstpSrc。但是,在调用memcpy(pDst, pSrc, nBytes)之前,仅检查pDst而不是NULL来检查pSrc

答案 1 :(得分:1)

我是Cppcheck开发人员。警告可能是错误的,但是当我无法复制时,很难说。

我希望您使用的是最新版本的Cppcheck(最新版本为1.84)。

默认文本输出并没有说明Cppcheck认为存在NULL指针的原因。您可以尝试--template=gcc吗?您应该能够看到Cppcheck如何得出结论,那就是存在空指针。

最好的问候, DanielMarjamäki