ITER.INAPPROPRIATE

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

ITER 检查器可以发现容器中与迭代器相关的问题。ITER.INAPPROPRIATE 检查器标记迭代器被分配到一个容器并结合其他容器使用的实例。

漏洞与风险

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

漏洞代码示例

复制
   void foo(set<int>& cont1, set<int>& cont2)
   {
     set<int>::iterator i = cont1.find(100);
     if (i != cont1.end())
       cont2.erase(i);
   }

在该示例中,迭代器 i 被分配到容器 cont1,然后却错误地与 cont2 一起使用,这会导致未定义的结果。

修正代码示例

复制
   void foo(set<int>& cont1, set<int>& cont2)
   {
     set<int>::iterator i = cont1.find(100);
     if (i != cont1.end())
   {
       i = cont2.find(100);
       if (i != cont2.end())
       cont2.erase(i);
   }

在该修正代码示例中,检索了与 cont2 相对应的迭代器。

扩展

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