exponenta event banner

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

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

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

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

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

Выберите флажок на панели Список результатов (Results List). На панели Сведения о результатах (Result Details) получите дополнительные сведения о проверке.

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

Щелкните правой кнопкой мыши переменную-указатель и выберите «Перейти к определению». Инициализируйте переменную при ее определении. Если инициализация во время определения не требуется, определите подходящую точку для инициализации переменной перед ее прочтением.

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

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

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

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

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

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

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

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

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

В зависимости от характера переменной используйте соответствующий метод для поиска предыдущих операций над переменной. В интерфейсе пользователя Polyspace можно выполнить только следующие действия.

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

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

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

  • Поиск переменной.

    1. Щелкните правой кнопкой мыши переменную. Выберите Поиск всех привязок (Search For All References).

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

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

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

    1. На панели «Источник» дважды щелкните переменную.

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

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

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

Щелкните правой кнопкой мыши переменную. Если отображается опция Показать в представлении доступа к переменной, переменная является глобальной переменной.

  1. Выберите опцию Показать в представлении переменного доступа (Show In Variable Access View).

    Текущий экземпляр переменной отображается на панели «Доступ к переменной».

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

    Операции записи для переменной обозначаются символом. Операции считывания указаны в.

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

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

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

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

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

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