0

我发现 Klocwork 报告的一些问题很奇怪。例如 -

if(NULL == m_pMutex.get())
{
    Log("found unexpected sharedPtr m_pMutex");
    return -1;
}

Time_Critical_Section cs(*m_pMutex);

对于上述代码,Klocwork 报告 NULL 指针取消引用。但我不认为这是一个有效的问题。就好像指针为空一样,它会从函数返回,并且没有机会访问指针。但是 Klocwork 仍然报告这是一个问题。

另一个问题是——

 char buf[1000];
 sprintf(buf,"%s",name);

对于上面的代码,Klocwork 说上面的代码部分会导致缓冲区溢出,'buf' 的数组索引可能超出范围。但我们确认名称变量不会大于 1000 字节。但 Klocwork 仍然报告这是一个问题。

我们需要让我们的代码没有错误,最终的代码不应该包含任何 Klocwork 的问题。任何人都可以提出一种有效的方法来克服上述问题吗?

4

1 回答 1

1

找到了空指针取消引用问题的根本原因。让我们解释一下为什么这段代码会取消引用空指针。

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;
}
于 2014-06-12T09:43:51.960 回答