【发布时间】:2014-03-04 03:02:45
【问题描述】:
我发现 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 的问题。任何人都可以提出一种有效的方法来克服上述问题吗?
【问题讨论】:
-
m_pMutex或m_pMutex.get()是指针吗? -
m_pMutex 是 boost 的智能指针。您需要检查调用 get 的智能指针,我的意思是检查 m_pMutex 的 px。
-
对于第二个问题,使用
snprintf()可能会删除 Klocwork 警告。 -
如果我们使用 char* 而不是 char 数组呢?
-
你仍然知道你为
char *分配的大小。
标签: c++ nullpointerexception buffer-overflow klocwork