Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Non-initialized local variable. Существует несколько способов зафиксировать эту проверку. Для описания проверки и примеров кода, смотрите Non-initialized local variable
.
Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.
Установите свой курсор на переменную, на которой появляется ошибка 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, которое происходит ранее в коде. Если предположение не сохраняется в вашем случае, добавьте комментарий или выравнивание в вашем результате или коде. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.
Например, вы передаете переменную функции указателем или ссылкой. Вы намереваетесь инициализировать переменную в теле функции, но вы не обеспечиваете тело функции во время верификации. Затем:
Polyspace принимает, что функциональная сила не инициализирует переменную.
Если вы используете переменную после вызова функции, Polyspace полагает, что переменная может быть не инициализирована. Это производит оранжевый Non-initialized local variable, проверяют переменную.
Для получения дополнительной информации смотрите Аналитические Предположения Программы автоматического доказательства Кода.
Прежде, чем выровнять по ширине оранжевую проверку, рассмотрите тщательно, можно ли улучшить проект кодирования.
Можно отключить эту проверку. Если вы отключаете эту проверку, Polyspace принимает, что в объявлении, переменным позволил полный диапазон значений их тип. Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.