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