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

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

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

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

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

Поместите курсор на переменную, на которой отображается Non-initialized local variable ошибка.

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

В предыдущем примере программное обеспечение идентифицирует упорную функцию initialize, как вероятную причину.

Возможное исправление: Чтобы избежать проверки, вы можете указать, что initialize записывает в свои аргументы. Для получения дополнительной информации смотрите Допущения об упрямых функциях.

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

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

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

    Щелкните правой кнопкой мыши переменную и выберите Go To Definition, если опция существует.

  2. Если вы не хотите инициализировать переменную во время определения, просмотрите все образцы переменной. Определите, инициализируете ли вы переменную в любом из этих образцов.

    Выполните одно из следующих действий:

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

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

    • На панели Source щелкните правой кнопкой мыши переменную. Выберите Search For All References.

      Выберите предыдущие образцы на панели Search.

    Возможное исправление: Если вы не инициализируете переменную, идентифицируйте образец, где можно инициализировать ее.

  3. Если вы находите образец, где вы инициализируете переменную, определите, выполняете ли вы инициализацию в возможности, где появляется ошибка Non-initialized local variable.

    Например, вы инициализируете переменную только в некоторых ветвях if ... elseif ... else оператор. Если вы используете переменную вне оператора, переменная может быть неинициализирована.

    Возможное исправление:

    • Выполните инициализацию в тех же возможностях, где вы ее используете.

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

    • Выполните инициализацию в блоке с меньшими возможностями, но убедитесь, что блок всегда выполняется.

      В предыдущем примере выполните инициализацию во всех ветвях if ... elseif ... else оператор. Убедитесь, что одна ветвь оператора выполняется всегда.

Шаг 3: Проверьте общие причины проверки

Проверьте общие причины проверки Non-initialized local variable.

  • Посмотрите, передаете ли вы переменную другой функции по ссылке или указателям перед ее использованием. Определите, инициализируете ли вы переменную в теле функции.

    Чтобы перейти к телу функции, щелкните правой кнопкой мыши функцию и выберите Go To Definition, если опция существует.

  • Определите, инициализируете ли вы переменную в коде, который не достижим.

    Например, вы инициализируете переменную в коде, который следует за break или return оператор.

    Возможное исправление: Исследуйте недостижимый код. Дополнительные сведения см. в разделах Просмотр и Исправление недоступных проверок кода.

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

    Например, вы инициализируете переменную в цикле внутри функции. Однако для определенных аргументов функции цикл не выполняется.

    Возможное исправление:

    • Инициализируйте переменную во время объявления.

    • Выяснить, когда код можно обойти. Определите, можно ли избегать обхода кода.

  • Если переменная является массивом, определите, инициализируете ли вы все элементы массива.

  • Если переменная является структурированной переменной, определите, инициализируете ли вы все поля структуры.

    Если вы не инициализируете определенное поле структуры, проверьте, не используется ли поле.

    Возможное исправление: Инициализируйте поле структуры, если вы используете поле в коде.

Шаг 4: Проверка трассировки на допущение Polyspace

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

Например, вы передаете переменную в функцию по указателю или ссылке. Вы намерены инициализировать переменную в теле функции, но не предоставляете тело функции во время верификации. Затем:

  • Polyspace принимает, что функция может не инициализировать переменную.

  • Если вы используете переменную, следующую за вызовом функции, Polyspace считает, что переменная может быть неинициализирована. Это создает оранжевую Non-initialized local variable проверку переменной.

Для получения дополнительной информации смотрите Допущения анализа Code Prover.

Примечание

Прежде чем обосновывать оранжевую проверку, внимательно рассмотрим, сможете ли вы улучшить свои проекты кодирования.

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

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