ITER 检查器可以发现容器中与迭代器相关的问题。ITER.END.DEREF.MIGHT 检查器可标记当迭代器的值可能等于 end() 或 rend() 时取消引用迭代器的实例。使用迭代器(尽管会对其进行检查)时或在其很难被发现的其他程序分支中时,可能会发生这种取消引用。
使用无效迭代器一般会导致未定义的行为。例如,当迭代器可以等于 end() 或 rend() 时取消引用迭代器会导致不可预测的内存访问。
为了避免发生该问题,在代码中添加 check,以确保迭代器的值不等于 end() 或 rend()。
如果该示例中的容器“cont”为空,则迭代器“i”的值将等于 cont.end()。在该案例中,取消引用“i”无效,并会生成未定义的结果。
在该修正代码示例中,在第 4 行添加的 check 可以确保迭代器 i 不等于 cont.end()。
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。