Non-initialized variable

Переменная, не инициализированная перед использованием

Описание

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

Риск

Если переменная не инициализирована явным образом, значение переменных непредсказуемо. Вы не можете полагаться на переменную, имеющую определенное значение.

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

Исправление зависит от первопричины дефекта. Например, вы присвоили значение переменной, но присвоение недоступно, или вы присвоили значение переменной в одной из двух ветвей условного оператора. Исправьте недостижимый код или отсутствующее назначение.

Часто детали результата показывают последовательность событий, которые привели к дефекту. Вы можете реализовать исправление на любом событии в последовательности. Если сведения о результате не отображают историю событий, можно отследить их с помощью опций правого щелчка в исходном коде и просмотреть предыдущие связанные события. Смотрите также Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.

См. примеры исправлений ниже. Рекомендуется инициализировать переменную при объявлении.

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

Примеры

расширить все

int get_sensor_value(void)
{
    extern int getsensor(void);
    int command;
    int val;

    command = getsensor();
    if (command == 2) 
      {
        val = getsensor();
      }

    return val;              
    /* Defect: val does not have a value if command is not 2 */
}

Если command не 2, переменная val не назначен. В этом случае возврат значение функции get_sensor_value не определено.

Коррекция - Инициализация во время объявления

Одной из возможных коррекций является инициализация val во время объявления так, чтобы инициализация не обходилась по некоторым путям выполнения.

int get_sensor_value(void)
{
    extern int getsensor(void);
    int command;
    /* Fix: Initialize val */
    int val=0;

    command = getsensor();
    if (command == 2) 
      {
        val = getsensor();
      }

    return val;              
 }

val присваивается начальное значение 0. Когда command не равно 2, функция get_sensor_value возвращает это значение.

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

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