Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Non-initialized variable. Существует несколько способов исправить эту проверку. Для получения описания примеров проверки и кода смотрите Non-initialized variable
.
Иногда, особенно для оранжевого чека, можно определить, что чек представляет не реальную ошибку, а Polyspace® предположение, что не соответствует действительности для вашего кода. Если для ослабления допущения можно использовать опцию анализа, повторите верификацию с помощью этой опции. В противном случае можно добавить комментарий и обоснование в результат или код.
Общий рабочий процесс, который применяется ко всем проверкам, см. в разделе Интерпретация результатов Prover кода в пользовательском интерфейсе рабочего стола Polyspace.
На панели 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
блок в функции. The if
блок не вводится для определенных входных параметров функции.
Возможное исправление: Выполните операцию записи на всех путях выполнения. В предыдущем примере выполните операцию записи во всех ветвях if ... elseif ... else
оператор.
Посмотрите, можно ли проследить оранжевую проверку до допущения Polyspace, которое происходит ранее в коде. Если предположение не имеет значения true в вашем случае, добавьте комментарий или обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Отключить эту проверку можно двумя способами:
Можно задать, что глобальные переменные должны рассматриваться как инициализированные. Polyspace рассматривает глобальные переменные, которые будут инициализированы в соответствии с ANSI® Стандарты C. Значениями по умолчанию являются:
0 для int
0 для char
0,0 для float
Для получения дополнительной информации смотрите Игнорировать инициализацию глобальных переменных по умолчанию.
Можно отключить проверку наряду с другими проверками инициализации. Если вы отключаете эту проверку, Polyspace принимает, что при объявлении переменные имеют полную область значений значений, разрешенных их типом. Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.