exponenta event banner

Запись без дальнейшего чтения

Переменная не читается после назначения

Описание

Этот дефект возникает, когда значение, назначенное переменной, никогда не считывается.

Например, вы записываете значение в переменную, а затем записываете второе значение перед прочтением предыдущего значения. Первая операция записи является избыточной.

Риск

Операции избыточной записи часто указывают на ошибки программирования. Например, вы забыли прочитать переменную между двумя последовательными операциями записи или непреднамеренно прочитать другую переменную.

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

Укажите причину записи в переменную, но не прочитайте ее позже. Поиск распространенных ошибок программирования, таких как случайное считывание другой переменной с похожим именем.

Если определено, что операция записи является избыточной, удалите операцию.

Примеры

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

void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor();            
    /* Defect: Useless write */
}

После переменной level получает назначенное значение 4 * getsensor(), он не читается.

Коррекция - использовать значение после присвоения

Одной из возможных корректировок является использование переменной. level после назначения.

#include <stdio.h>

void sensor_amplification(void)
{
    extern int getsensor(void);
    int level;

    level = 4 * getsensor(); 
    
    /* Fix: Use level after assignment */
    printf("The value is %d", level);
    
}

Переменная level распечатывается, читая новое значение.

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

Группа: Поток данных
Язык: C | C++
По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода
Синтаксис командной строки: USELESS_WRITE
Воздействие: Низкий
ИДЕНТИФИКАТОР CWE: 398
Представлен в R2013b