UNUSED.FUNC.STL_EMPTY

忽略 STL 对象 empty() 方法的返回值

如果忽略调用返回的值,则 UNUSED.FUNC.STL_EMPTY 检查器会对调用实例进行检测,并向标准 C++ 容器类的 empty() 方法报告。

漏洞与风险

标准库中的 C++ 容器通常会实施两种不同的方法:clear() 和 empty()。clear() 方法可清除容器的内容;empty() 方法可检查容器中是否至少包含一个元素。如果意外混淆这两种方法,则可能会导致严重且难以发现的算法 bug。empty() 方法会返回一个布尔值,用来存储检查的结果。忽略此值的做法很可疑,并且表明在选择要调用的方法名称时可能存在错误。

漏洞代码示例

在以下代码中,程序员原本想要清除容器的内容。然而,他们调用了 empty() 方法来检查容器是否为空。

复制
   void foo(std::vector<MyType>& v)
   {
       /* ...*/
       v.empty();    // return value is ignored, indicating a logical mistake
   }

在此示例中,Klocwork 将表达式 v.empty() 报告为 UNUSED.FUNC.STL_EMPTY 缺陷。

修正代码示例

在修正代码示例中,程序员正确地调用了 clear() 方法。

复制
   void foo(std::vector<MyType>& v)
   {
       /* ...*/
       v.clear();
   }

相关检查器