我发现Klocwork报告的一些问题是非常奇怪的。例如-
if(NULL == m_pMutex.get())
{
Log("found unexpected sharedPtr m_pMutex");
return -1;
}
Time_Critical_Section cs(*m_pMutex);对于上面的代码,Klocwork报告空指针取消引用。但我不认为这是一个有效的问题。如果指针是空的,那么它将从函数返回,并且没有机会访问指针。但Klocwork仍将此作为一个问题报道。
另一个问题是-
char buf[1000];
sprintf(buf,"%s",name);对于上面的代码Klocwork说,上面的代码部分可能导致缓冲区溢出,'buf‘的数组索引可能超出界限。但是我们正在确认name变量不会大于1000个字节。但Klocwork仍将此作为一个问题来报道。
我们需要使代码没有错误,最后的代码不应该包含任何关于Klocwork的问题。有人能提出解决上述问题的有效方法吗?
发布于 2014-06-12 09:43:51
找到空指针取消引用问题的根本原因。让我们解释一下为什么这段代码会得到空指针取消引用。
if(NULL == m_pMutex.get())
{
Log("found unexpected sharedPtr m_pMutex");
return -1;
}
Time_Critical_Section cs(*m_pMutex);因为Klocwork是一个静态代码分析器,当它检查"Time_Critical_Section cs(*m_pMutex)“中的指针时;它在打开的块中找到它,尽管它已经被检查过了,如果指针是空的,那么我们已经从值-1的函数返回了它。当Klocwork进行静态代码分析时,它不知道它之前将指针作为开放块中指针的访问代码进行了检查。我们可以通过修改代码来解决这个问题-
if(NULL == m_pMutex.get())
{
Log("found unexpected sharedPtr m_pMutex");
return -1;
}
else
{
Time_Critical_Section cs(*m_pMutex);
//Do some operations
return 0;
}https://stackoverflow.com/questions/22162020
复制相似问题