Просмотрите и исправьте неинициализированные проверки указателя

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

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

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

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

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

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

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

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

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

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

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

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

    • В недоступном кодовом блоке.

      Возможное исправление: Исследуйте, почему блок кода недоступен. См. Раздел «Просмотр и исправление недоступных проверок кода».

    • В блоке кода, который не достигается на определенных путях выполнения. Например, операция происходит в if блок в функции. The 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, которое происходит ранее в коде. Если предположение не имеет значения true в вашем случае, добавьте комментарий или обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

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

Отключить чек можно двумя способами:

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

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