Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Non-initialized variable. Существует несколько способов зафиксировать эту проверку. Для описания проверки и примеров кода, смотрите Non-initialized variable
.
Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.
На панели Results List выберите проверку. На панели Result Details получите дополнительную информацию о проверке.
Получите следующую информацию:
Вероятная причина проверки, если описано на панели Result Details.
В предыдущем примере существует оранжевый Non-initialized variable, проверяют глобальную переменную globVar
.
Программное обеспечение обнаруживает, что проверка является потенциально связанной с путем проблемой. Поэтому глобальная переменная может быть не инициализирована только на определенных путях к выполнению. Например, вы инициализировали глобальную переменную в if
блокируйтесь, но не инициализируйте его в соответствующем else
блок.
Возможная фиксация: Определите, вдоль которого соединяет глобальные переменные каналом, может быть не инициализирован.
Значение глобальной переменной, если инициализировано.
В предыдущем примере, когда инициализировано, глобальная переменная globVar
имеет значение 0.
Можно выполнить следующие шаги в пользовательском интерфейсе Polyspace только.
Щелкните правой кнопкой по переменной и выберите Go To Definition. Инициализируйте переменную, когда вы зададите ее. Если вы не хотите инициализировать во время определения, идентифицировать подходящую точку, чтобы инициализировать переменную, прежде чем вы считаете его.
Если проверка является оранжевой, определите, почему переменная не инициализируется на определенных путях к выполнению.
Щелкните правой кнопкой по переменной. Выберите Show In Variable Access View.
На панели Variable Access выберите каждую операцию записи на переменной.
Операции записи обозначаются с и операции чтения с.
Определите, происходит ли операция записи:
Перед операцией чтения, содержащей оранжевую проверку Non-initialized variable.
Возможная фиксация: Если операция записи происходит после операции чтения, смотрите, намеревались ли вы выполнить операции в обратном порядке.
В недостижимом блоке кода.
Возможная фиксация: Займитесь расследованиями, почему блок кода недостижим. Смотрите Анализ и Зафиксируйте Недостижимые Проверки Кода.
В блоке кода, который не достигнут на определенных путях к выполнению. Например, операция происходит в if
блокируйтесь в функции. if
блок не вводится для определенных входных параметров функции.
Возможная фиксация: Выполните операцию записи на всех путях к выполнению. В предыдущем примере выполните операцию записи во всех ветвях if ... elseif ... else
оператор.
Смотрите, можно ли проследить оранжевую проверку до предположения Polyspace, которое происходит ранее в коде. Если предположение не сохраняется в вашем случае, добавьте комментарий или выравнивание в вашем результате или коде. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
Можно отключить эту регистрацию двух путей:
Можно указать, что глобальные переменные должны быть рассмотрены, как инициализировано. Polyspace полагает, что глобальные переменные инициализируются согласно стандартам ANSI® C. Значения по умолчанию:
0 для int
0 для char
0.0 для float
Для получения дополнительной информации смотрите, Игнорируют инициализацию по умолчанию глобальных переменных.
Можно отключить проверку наряду с другими проверками инициализации. Если вы отключаете эту проверку, Polyspace принимает, что в объявлении, переменные имеют полный спектр значений, позволенных их типом. Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.