exponenta event banner

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

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

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

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

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

На панели Список результатов (Results List) выберите флажок. На панели Сведения о результатах (Result Details) получите дополнительные сведения о проверке.

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

  • Вероятная причина проверки, если описано на панели Сведения о результате.

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

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

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

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

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

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

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

Щелкните правой кнопкой мыши переменную и выберите «Перейти к определению». Инициализируйте переменную при ее определении. Если инициализация во время определения не требуется, определите подходящую точку для инициализации переменной перед ее прочтением.

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

  1. Щелкните правой кнопкой мыши переменную. Выберите Показать в представлении переменного доступа (Show In Variable Access View).

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

    Операции записи обозначаются как операции записи, а операции чтения - как операции записи.

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

    • Перед операцией чтения, содержащей оранжевую неинициализированную проверку переменной.

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

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

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

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

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

Шаг 3: Проверка трассировки в соответствии с предположением Polyspace

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

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

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

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

    • 0 для int

    • 0 для char

    • 0,0 для float

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

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