異なる配列を指すポインター間の減算または比較
異なる配列を指すポインター間の減算または比較による未定義の動作の発生
説明
この欠陥は、null ポインターまたは別の配列内の要素を指しているポインターを減算または比較した場合に発生します。比較の関係演算子は >
、<
、>=
、および <=
です。
リスク
同じ配列内の要素を指す 2 つのポインターを減算する場合、結果は 2 つの配列要素の添字の間の差になります。同様に、配列の要素を指す 2 つのポインターを比較する場合、結果は相対的なポインターの位置になります。ポインターが null または異なる配列の要素を指している場合、減算や比較演算は未定義です。減算結果をバッファー インデックスとして使用する場合、バッファー オーバーフローが発生する可能性があります。
修正方法
配列要素を指すポインターの減算や比較演算子による比較を行う前に、ポインターが非 null であり同じ配列を指していることをチェックします。
例
結果情報
グループ: 静的メモリ |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: PTR_TO_DIFF_ARRAY
|
影響度: High |