Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Non-initialized local variable. Существует несколько способов исправить эту проверку. Для получения описания примеров проверки и кода смотрите Non-initialized local variable
.
Иногда, особенно для оранжевого чека, можно определить, что чек представляет не реальную ошибку, а Polyspace® предположение, что не соответствует действительности для вашего кода. Если для ослабления допущения можно использовать опцию анализа, повторите верификацию с помощью этой опции. В противном случае можно добавить комментарий и обоснование в результат или код.
Общий рабочий процесс, который применяется ко всем проверкам, см. в разделе Интерпретация результатов Prover кода в пользовательском интерфейсе рабочего стола Polyspace.
Поместите курсор на переменную, на которой отображается Non-initialized local variable ошибка.
Получите вероятную первопричину для неинициализированной переменной, если указано в всплывающей подсказке.
В предыдущем примере программное обеспечение идентифицирует упорную функцию initialize
, как вероятную причину.
Возможное исправление: Чтобы избежать проверки, вы можете указать, что initialize
записывает в свои аргументы. Для получения дополнительной информации смотрите Допущения об упрямых функциях.
Можно выполнить следующие шаги только в пользовательском интерфейсе Polyspace.
Поиск определения переменной. Проверьте, инициализируете ли вы переменную, когда задаете ее.
Щелкните правой кнопкой мыши переменную и выберите Go To Definition, если опция существует.
Если вы не хотите инициализировать переменную во время определения, просмотрите все образцы переменной. Определите, инициализируете ли вы переменную в любом из этих образцов.
Выполните одно из следующих действий:
На панели Source дважды щелкните переменную.
Предыдущие образцы переменной подсвечиваются. Прокрутите, чтобы найти их.
На панели Source щелкните правой кнопкой мыши переменную. Выберите Search For All References.
Выберите предыдущие образцы на панели Search.
Возможное исправление: Если вы не инициализируете переменную, идентифицируйте образец, где можно инициализировать ее.
Если вы находите образец, где вы инициализируете переменную, определите, выполняете ли вы инициализацию в возможности, где появляется ошибка Non-initialized local variable.
Например, вы инициализируете переменную только в некоторых ветвях if ... elseif ... else
оператор. Если вы используете переменную вне оператора, переменная может быть неинициализирована.
Возможное исправление:
Выполните инициализацию в тех же возможностях, где вы ее используете.
В предыдущем примере выполните инициализацию вне if ... elseif ... else
оператор.
Выполните инициализацию в блоке с меньшими возможностями, но убедитесь, что блок всегда выполняется.
В предыдущем примере выполните инициализацию во всех ветвях if ... elseif ... else
оператор. Убедитесь, что одна ветвь оператора выполняется всегда.
Проверьте общие причины проверки Non-initialized local variable.
Посмотрите, передаете ли вы переменную другой функции по ссылке или указателям перед ее использованием. Определите, инициализируете ли вы переменную в теле функции.
Чтобы перейти к телу функции, щелкните правой кнопкой мыши функцию и выберите Go To Definition, если опция существует.
Определите, инициализируете ли вы переменную в коде, который не достижим.
Например, вы инициализируете переменную в коде, который следует за break
или return
оператор.
Возможное исправление: Исследуйте недостижимый код. Дополнительные сведения см. в разделах Просмотр и Исправление недоступных проверок кода.
Определите, инициализируете ли вы переменную в коде, которую можно обойти во время выполнения.
Например, вы инициализируете переменную в цикле внутри функции. Однако для определенных аргументов функции цикл не выполняется.
Возможное исправление:
Инициализируйте переменную во время объявления.
Выяснить, когда код можно обойти. Определите, можно ли избегать обхода кода.
Если переменная является массивом, определите, инициализируете ли вы все элементы массива.
Если переменная является структурированной переменной, определите, инициализируете ли вы все поля структуры.
Если вы не инициализируете определенное поле структуры, проверьте, не используется ли поле.
Возможное исправление: Инициализируйте поле структуры, если вы используете поле в коде.
Посмотрите, можно ли проследить оранжевую проверку до допущения Polyspace, которое происходит ранее в коде. Если предположение не имеет значения true в вашем случае, добавьте комментарий или обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Например, вы передаете переменную в функцию по указателю или ссылке. Вы намерены инициализировать переменную в теле функции, но не предоставляете тело функции во время верификации. Затем:
Polyspace принимает, что функция может не инициализировать переменную.
Если вы используете переменную, следующую за вызовом функции, Polyspace считает, что переменная может быть неинициализирована. Это создает оранжевую Non-initialized local variable проверку переменной.
Для получения дополнительной информации смотрите Допущения анализа Code Prover.
Примечание
Прежде чем обосновывать оранжевую проверку, внимательно рассмотрим, сможете ли вы улучшить свои проекты кодирования.
Можно отключить эту проверку. Если вы отключаете эту проверку, Polyspace принимает, что при объявлении переменные имеют полный диапазон значений, разрешенных их типом. Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.