Вычитание или сравнение между указателями вызывает неопределенное поведение
Этот дефект возникает, когда вы вычитаете или сравниваете указатели, которые имеют значение null или которые указывают на элементы в разных массивах. Реляционные операторы для сравнения >,
<
, >=
, и <=
.
Когда вы вычитаете два указателя на элементы в одном массиве, результатом является различие между нижними индексами двух элементов массива. Точно так же, когда вы сравниваете два указателя с элементами массива, результатом являются положения указателей относительно друг друга. Если указатели имеют значение null или указывают на различные массивы, операция вычитания или сравнения не определена. Если вы используете результат вычитания как индекс буфера, это может вызвать переполнение буфера.
Прежде чем вы вычитаете или используете реляционные операторы, чтобы сравнить указатели на элементы массива, проверяйте, что они не имеют значения null и что они указывают на один и тот же массив.
Группа: Статическая память |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: PTR_TO_DIFF_ARRAY
|
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE : 469 |