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