exponenta event banner

Недопустимое использование оператора = =

Операция равенства в операторе назначения

Описание

Этот дефект возникает при использовании оператора равенства вместо оператора назначения в простом операторе.

Риск

Использование == оператор вместо оператора = оператор может молча выдать неверные результаты. Если требуется присвоить значение переменной, назначение не выполняется. Переменная сохраняет свое предыдущее значение или, если не инициализирована ранее, остается неинициализированной.

Зафиксировать

Используйте = (присвоение) оператор вместо == (равенство) оператор.

Проверка появляется в цепях операторов назначения и равенства, таких как:

compFlag = val1 == val2;
Для лучшей читаемости кода поместите проверку равенства в круглые скобки.
compFlag = (val1 == val2);

Если использование == оператор предназначен для добавления комментариев к результату или коду, чтобы избежать другого обзора. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Примеры

развернуть все

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j == 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

Внутри for-loop, оператор j == 5 проверяет, j равно 5 вместо установки j до 5. for-loop итераций от 0 до 8, поскольку j начинается со значения 0, а не 5. Побочным продуктом недопустимого оператора равенства является внеграничный доступ к массиву в следующей строке.

Исправление - изменение оператора присвоения

Одной из возможных корректировок является изменение == оператор к единому знаку равенства (=). Изменение == знак устраняет оба дефекта, потому что for-loop итерирует заданное число раз.

void populate_array(void)
{
    int i = 0;
    int j = 0;
    int array[4];

    for (j = 5; j < 9; j++) {
        array[i] = j;
        i++;
    }
}

Информация о результатах

Группа: Программирование
Язык: C | C++
По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода
Синтаксис командной строки: BAD_EQUAL_EQUAL_USE
Воздействие: Высокое
CWE ID: 480, 482
Представлен в R2013b