首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为C++项目报告的奇怪的Klocwork问题

为C++项目报告的奇怪的Klocwork问题
EN

Stack Overflow用户
提问于 2014-03-04 03:02:45
回答 1查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
if(NULL == m_pMutex.get())
{
    Log("found unexpected sharedPtr m_pMutex");
    return -1;
}

Time_Critical_Section cs(*m_pMutex);

对于上面的代码,Klocwork报告空指针取消引用。但我不认为这是一个有效的问题。如果指针是空的,那么它将从函数返回,并且没有机会访问指针。但Klocwork仍将此作为一个问题报道。

另一个问题是-

代码语言:javascript
复制
 char buf[1000];
 sprintf(buf,"%s",name);

对于上面的代码Klocwork说,上面的代码部分可能导致缓冲区溢出,'buf‘的数组索引可能超出界限。但是我们正在确认name变量不会大于1000个字节。但Klocwork仍将此作为一个问题来报道。

我们需要使代码没有错误,最后的代码不应该包含任何关于Klocwork的问题。有人能提出解决上述问题的有效方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 09:43:51

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

代码语言:javascript
复制
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进行静态代码分析时,它不知道它之前将指针作为开放块中指针的访问代码进行了检查。我们可以通过修改代码来解决这个问题-

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22162020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档