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++ 分析。