ITER.INAPPROPRIATE.MULTIPLE

迭代器含有不适当的容器对象

ITER 检查器可以发现容器中与迭代器相关的问题。ITER.INAPPROPRIATE.MULTIPLE 检查器标记了两个分配到不同容器的迭代器与第三个容器一起使用的实例。

漏洞与风险

使用无效迭代器一般会导致未定义的行为。例如,使用错误容器中的迭代器会导致不可预测的程序操作。将迭代器置于不适当容器中的代码总是提供错误结果,导致算法不会按照预期或要求执行。

漏洞代码示例

复制
   #include <set>
   using namespace std;
    
 
   void foo(set<int>& cont1, set<int>& cont2, set<int>& cont3)
   {
       set<int>::iterator i = cont1.find(100);
       set<int>::iterator j = cont2.find(200);
       cont3.insert(i, j);
  }
   
  int main() 
  {
      return 0;
  }

在该示例中,迭代器 i 和迭代器 j 分别被分配到 cont1 和 cont2,它们用于指定 cont3 的范围,这会导致未定义的结果。Klocwork 针对第 9 行报告 ITER.INAPPROPRIATE.MULTIPLE。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。