Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Return value not initialized. Существует несколько способов зафиксировать эту проверку. Для описания проверки и примеров кода, смотрите Return value not initialized
.
Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.
Выберите проверку на панели Results List. На панели Result Details просмотрите дополнительную информацию о проверке.
Просмотрите вероятную причину проверки, если упомянуто на панели Result Details.
В предыдущем примере программное обеспечение идентифицирует заблокированную функцию, inputRep
, как вероятная причина.
Возможная фиксация: Чтобы избежать проверки, ограничьте значение аргумента или возвращаемое значение inputRep
. Например, укажите, что inputRep
возвращает значения в определенной области значений, например, 1..10
. Для получения дополнительной информации смотрите Заблокированные Функции.
Определите первопричину регистрации тела функции. Можно выполнить следующие шаги в пользовательском интерфейсе Polyspace только.
Перейдите к функциональному определению.
Щелкните правой кнопкой по вызову функции, содержащему проверку. Выберите Go To Definition, если опция существует.
В теле функции проверяйте, происходит ли оператор return
перед закрывающей фигурной скобкой функции.
Если оператор return
не существует:
На панели Search ищите слово return
, или вручную просмотрите тело функции путем прокрутки и ищите операторы return
.
Для каждого оператора return
определите, появляется ли оператор в осциллографе, меньшем, чем функциональный осциллограф.
Например, оператор return
происходит только в одном ответвлении оператора if-else
.
Возможная фиксация: Смотрите, можно ли поместить оператор return
в конце тела функции. Например, замените следующий код
int func(int ch) { switch(ch) { case 1: return 1; break; case 2: return 2; break; } }
int func(int ch) { int temp; switch(ch) { case 1: temp = 1; break; case 2: temp = 2; break; } return temp; }
Number of Return Statements
.
Ищите частые причины проверки Return value not initialized.
Смотрите, появляются ли операторы return
в if-else
, for
или блоках while
. Идентифицируйте условия, когда функция не введет блок.
Например, функциональная сила не вводят блок while
для определенных входных параметров функции.
Возможная фиксация:
Смотрите, можно ли поместить оператор return
в конце тела функции.
В противном случае определите, как избежать условия, когда функция не вводит блок.
Например, если функция не вводит блок для определенных входных параметров, смотрите, необходимо ли передать различные входные параметры.
Смотрите, есть ли у вас построения кода, такие как goto
, которые прерывают нормальный поток управления. Смотрите, существуют ли условия, когда операторы return
в вашей функции не могут быть достигнуты из-за этих построений кода.
Возможная фиксация:
Операторы Avoid goto
. Для получения информации о том, как осуществить эту практику, смотрите Number of Goto Statements
.
В противном случае определите, как избежать условия, когда операторы return
в вашей функции не могут быть достигнуты.
Смотрите, можно ли проследить оранжевую проверку до предположения Polyspace, которое происходит ранее в коде. Если предположение не сохраняется в вашем случае, добавьте комментарий или выравнивание в вашем результате или коде. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.
Например, у вас есть оператор return
в ответвлениях блока if-elseif
, но у вас нет итогового блока else
. Условие, которое вы тестируете в блоках if-elseif
, включает переменные, полученные из неопределенной функции. Затем:
Polyspace принимает, что для определенных значений тех переменных, ни один из блоков if-elseif
не вводится.
Поэтому возможно, что операторы return
не достигнуты.
Если вы знаете, что те значения переменных не происходят, добавьте комментарий и выравнивание, описывающее, почему вы не изменили свой код.
Для получения дополнительной информации смотрите Аналитические Предположения Программы автоматического доказательства Кода.
Можно отключить эту проверку. Если вы отключаете эту проверку, Polyspace принимает неотступно следование за функциональным возвращаемым значением, если функция пропускает операторы return
:
Если возвращаемое значение является неуказательной переменной, ему позволил полный диапазон значений его тип.
Если возвращаемое значение является указателем, это может быть NULL
- оцененный или указать на блок памяти при неизвестном смещении.
Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.