C++ 如何通过Cppcheck解释空指针解引用?
我在查看过程中遇到了一个代码,当我使用cpp check时,它表示一个空指针取消引用错误。我想不出原因。 代码如下:C++ 如何通过Cppcheck解释空指针解引用?,c++,cppcheck,C++,Cppcheck,我在查看过程中遇到了一个代码,当我使用cpp check时,它表示一个空指针取消引用错误。我想不出原因。 代码如下: CopyMemory(NULL, dummyMatrixManager.GetConstDataPtr(), dummyMatrixManager.GetNumberOfElements() * sizeof(tFloat)); void CopyMemory( tFloat* pDst, const tFloat* pSrc, const tSize nBytes ) {
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.");
}
}
谢谢你
无效的CopyMemory(tFloat*pDst,const tFloat*pSrc,const tSize nBytes)
有两个参数作为指针传递,pDst
和pSrc
。但是,在调用memcpy(pDst,pSrc,nBytes)
之前,只检查pDst
是否为NULL
,而不是pSrc
。void CopyMemory(tFloat*pDst,const tFloat*pSrc,const tSize nBytes)
有两个参数作为指针传递,pDst
pDst和pSrc
。但是,在调用memcpy(pDst,pSrc,nBytes)
之前,只检查pDst
是否为NULL
,而不是pSrc
。我是一名Cppcheck开发人员。这个警告可能是错误的,但很难说我什么时候不能复制
我希望您使用的是Cppcheck的最新版本(1.84是最新版本)
默认文本输出没有说明为什么Cppcheck认为存在空指针。您能试试--template=gcc
吗?您应该能够看到Cppcheck是如何得出存在空指针的结论的
致以最良好的祝愿,
Daniel Marjamäki我是Cppcheck的开发者。这个警告可能是错误的,但很难说我什么时候不能复制 我希望您使用的是Cppcheck的最新版本(1.84是最新版本) 默认文本输出没有说明为什么Cppcheck认为存在空指针。您能试试
--template=gcc
吗?您应该能够看到Cppcheck是如何得出存在空指针的结论的
致以最良好的祝愿,
Daniel Marjamäki奇怪的密码。特别是这个条件:<代码>(null!= PDST)< /代码>。@是的。非常奇怪的<代码> null <代码>是,并且从开始以来就是标准C++。不知道为什么评论者对此有问题@Ron检查是否传入了
NULL
有什么奇怪的地方?@Ron有一种相当流行的样式,它更喜欢在=
比较的左侧使用常量,以确保如果程序员意外键入=
,代码将无法编译。即使我自己不使用这种风格,我也不认为它有什么奇怪的地方。@Ron是从很久以前开始的,那时编译器没有警告if语句中的=
。将NULL放在左边会产生编译错误。奇怪的代码。特别是这个条件:<代码>(null!= PDST)< /代码>。@是的。非常奇怪的<代码> null <代码>是,并且从开始以来就是标准C++。不知道为什么评论者对此有问题@Ron检查是否传入了NULL
有什么奇怪的地方?@Ron有一种相当流行的样式,它更喜欢在=
比较的左侧使用常量,以确保如果程序员意外键入=
,代码将无法编译。即使我自己不使用这种风格,我也不认为它有什么奇怪的地方。@Ron是从很久以前开始的,那时编译器没有警告if语句中的=
。将NULL放在左边会导致编译错误。这没有帮助。Cppcheck仍然在CopyMemory函数调用行显示错误。这没有帮助。Cppcheck仍然在CopyMemory函数调用行显示错误。即使使用template=gcc,我也使用1.84进行了复制。代码见我上面(下面)的答案。即使使用template=gcc,我也使用1.84进行了复制。有关代码,请参见我上面(下面)的答案。