Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки 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
для
или while
блоки. Идентифицируйте условия, когда функция не введет блок.
Например, функциональная сила не вводят while
блокируйтесь для определенных входных параметров функции.
Возможная фиксация:
Смотрите, можно ли поместить return
оператор в конце тела функции.
В противном случае определите, как избежать условия, когда функция не вводит блок.
Например, если функция не вводит блок для определенных входных параметров, смотрите, необходимо ли передать различные входные параметры.
Смотрите, есть ли у вас построения кода, такие как goto
то прерывание нормальный поток управления. Смотрите, существуют ли условия когда return
операторы в вашей функции не могут быть достигнуты из-за этих построений кода.
Возможная фиксация:
Избегайте 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)
.