Рассмотрите и зафиксируйте неинициализированные проверки указателя

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

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

Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.

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

Выберите проверку на панели Results List. На панели Result Details получите дополнительную информацию о проверке.

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

Щелкните правой кнопкой по переменной указателя и выберите Go To Definition. Инициализируйте переменную, когда вы зададите ее. Если вы не хотите инициализировать во время определения, идентифицировать подходящую точку, чтобы инициализировать переменную, прежде чем вы считаете его.

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

  1. Найдите предыдущие экземпляры, где операции записи выполняются на указателе.

  2. Для каждой операции записи определите, происходит ли операция:

    • Перед операцией чтения, содержащей оранжевую проверку Non-initialized pointer.

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

    • В недостижимом блоке кода.

      Возможная фиксация: Займитесь расследованиями, почему блок кода недостижим. Смотрите Анализ и Зафиксируйте Недостижимые Проверки Кода.

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

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

В зависимости от природы переменной используйте соответствующий метод, чтобы найти предыдущие операции на переменной. Можно выполнить следующие шаги в пользовательском интерфейсе Polyspace только.

ПеременнаяКак найти предыдущие операции на переменной

Локальная переменная

Используйте один из следующих методов:

  • Ищите переменную.

    1. Щелкните правой кнопкой по переменной. Выберите Search For All References.

      Все экземпляры переменной появляются на панели Search с текущим подсвеченным экземпляром.

    2. На панели Search выберите предыдущие экземпляры.

  • Просмотрите исходный код.

    1. На панели Source дважды кликните переменную.

      Все экземпляры переменной подсвечены.

    2. Прокрутите, чтобы найти предыдущие экземпляры.

Глобальная переменная

Щелкните правой кнопкой по переменной. Если опция, Show In Variable Access View появляется, переменная, является глобальной переменной.

  1. Выберите опцию Show In Variable Access View.

    Текущий экземпляр переменной показывают на панели Variable Access.

  2. На этой панели выберите предыдущие экземпляры переменной.

    Операции записи на переменной обозначаются с. Операции чтения обозначаются с.

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

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

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

Можно отключить регистрацию двух путей:

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

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