Просмотрите и исправьте неинициализированные проверки переменных

Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Non-initialized variable. Существует несколько способов исправить эту проверку. Для получения описания примеров проверки и кода смотрите Non-initialized variable.

Иногда, особенно для оранжевого чека, можно определить, что чек представляет не реальную ошибку, а Polyspace® предположение, что не соответствует действительности для вашего кода. Если для ослабления допущения можно использовать опцию анализа, повторите верификацию с помощью этой опции. В противном случае можно добавить комментарий и обоснование в результат или код.

Общий рабочий процесс, который применяется ко всем проверкам, см. в разделе Интерпретация результатов Prover кода в пользовательском интерфейсе рабочего стола Polyspace.

Шаг 1: Интерпретируйте информацию о проверке

На панели Results List выберите проверку. На панели Result Details получите дополнительные сведения о проверке.

Получите следующую информацию:

  • Вероятная причина проверки, если она описана на панели Result Details.

    В предыдущем примере существует оранжевая проверка Non-initialized variable на глобальную переменную globVar.

    Программа обнаруживает, что проверка потенциально является проблемой, связанной с путями. Поэтому глобальная переменная может быть неинициализирована только на определенных путях выполнения. Для примера вы инициализировали глобальную переменную в if блок, но не инициализировал его в соответствующем else блок.

    Возможное исправление: Определите, по каким путям глобальные переменные могут быть неинициализированы.

  • Значение глобальной переменной, если оно инициализировано.

    В предыдущем примере, при инициализации, глобальная переменная globVar имеет значение 0.

Шаг 2: Определите первопричину проверки

Можно выполнить следующие шаги только в пользовательском интерфейсе Polyspace.

Щелкните правой кнопкой мыши переменную и выберите Go To Definition. Инициализируйте переменную, когда вы задаете ее. Если вы не хотите инициализировать во время определения, идентифицируйте подходящую точку, чтобы инициализировать переменную перед чтением.

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

  1. Щелкните правой кнопкой мыши переменную. Выберите Show In Variable Access View.

  2. На панели Variable Access выберите каждую операцию записи переменной.

    Операции записи указываются с и считываются с.

  3. Определите, происходит ли операция записи:

    • Перед операцией чтения, содержащей оранжевый Non-initialized variable чек.

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

    • В недоступном кодовом блоке.

      Возможное исправление: Исследуйте, почему блок кода недоступен. См. Раздел «Просмотр и исправление недоступных проверок кода».

    • В блоке кода, который не достигается на определенных путях выполнения. Например, операция происходит в if блок в функции. The if блок не вводится для определенных входных параметров функции.

      Возможное исправление: Выполните операцию записи на всех путях выполнения. В предыдущем примере выполните операцию записи во всех ветвях if ... elseif ... else оператор.

Шаг 3: Проверка трассировки на допущение Polyspace

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

Отключение этой проверки

Отключить эту проверку можно двумя способами:

  • Можно задать, что глобальные переменные должны рассматриваться как инициализированные. Polyspace рассматривает глобальные переменные, которые будут инициализированы в соответствии с ANSI® Стандарты C. Значениями по умолчанию являются:

    • 0 для int

    • 0 для char

    • 0,0 для float

    Для получения дополнительной информации смотрите Игнорировать инициализацию глобальных переменных по умолчанию.

  • Можно отключить проверку наряду с другими проверками инициализации. Если вы отключаете эту проверку, Polyspace принимает, что при объявлении переменные имеют полную область значений значений, разрешенных их типом. Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks).