ITER.INAPPROPRIATE.MULTIPLE
コンテナーオブジェクトが不適切な反復子
ITER チェッカーはコンテナー内の反復子に関する問題を検出します。ITER.INAPPROPRIATE.MULTIPLE チェッカーは、2 つの反復子が別々のコンテナーに割り当てられ、3 番目のコンテナーとともに使用されるインスタンスにフラグを立てます。
脆弱性とリスク
無効な反復子を使用すると、一般に、未定義の動作をします。たとえば、反復子を間違ったコンテナーで使用すると、プログラムが予想できない動作をする可能性があります。反復子が不適切なコンテナーで使用されるコードでは、結果は常に false になり、このため、アルゴリズムは想定した、または意図したとおりには動作しません。
脆弱コード例
コピー
#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 は、ITER.INAPPROPRIATE.MULTIPLE を 9 行目でレポートします。
関連チェッカー
外部参考資料
拡張機能
このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。