Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Return value not initialized. Существует несколько способов исправить эту проверку. Для получения описания примеров проверки и кода смотрите Return value not initialized
.
Иногда, особенно для оранжевого чека, можно определить, что чек представляет не реальную ошибку, а Polyspace® предположение, что не соответствует действительности для вашего кода. Если для ослабления допущения можно использовать опцию анализа, повторите верификацию с помощью этой опции. В противном случае можно добавить комментарий и обоснование в результат или код.
Общий рабочий процесс, который применяется ко всем проверкам, см. в разделе Интерпретация результатов Prover кода в пользовательском интерфейсе рабочего стола Polyspace.
Выберите проверку на панели Results List. На панели Result Details просмотрите дополнительные сведения о проверке.
Просмотрите вероятную причину проверки, если она упоминается на панели Result Details.
В предыдущем примере программное обеспечение идентифицирует упорную функцию inputRep
, как вероятную причину.
Возможное исправление: Чтобы избежать проверки, ограничьте аргумент или возвращаемое значение inputRep
. Для образца задайте, что inputRep
возвращает значения в определенной области значений, например 1..10
. Для получения дополнительной информации смотрите Допущения об упрямых функциях.
Определите первопричину проверки в теле функции. Можно выполнить следующие шаги только в пользовательском интерфейсе Polyspace.
Перейдите к определению функции.
Щелкните правой кнопкой мыши вызов функции, содержащий проверку. Выберите Go To Definition, если опция существует.
В теле функции проверьте, return
ли оператор возникает перед закрывающей скобкой функции.
Если a return
оператор не существует:
На панели Search выполните поиск по слову return
, или вручную прокрутить тело функции и искать return
операторы.
Для каждого return
оператор, определите, отображается ли оператор в возможностях, меньшей, чем возможности функции.
Для образца, a 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
операторы в функции не могут быть достигнуты из-за этих конструкций кода.
Возможное исправление:
Избегайте goto
операторы. Для получения информации о том, как применить эту практику, смотрите Number of Goto Statements
.
В противном случае определите, как избежать условия при return
операторы в функции не могут быть достигнуты.
Посмотрите, можно ли проследить оранжевую проверку до допущения Polyspace, которое происходит ранее в коде. Если предположение не имеет значения true в вашем случае, добавьте комментарий или обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Например, у вас есть return
оператор в ветвях if-elseif
блок, но у вас нет окончательного else
блок. Условие, которое вы тестируете в if-elseif
блоки включают переменные, полученные из неопределенной функции. Затем:
Polyspace принимает, что для определенных значений этих переменных ни одно из if-elseif
вводятся блоки.
Поэтому возможно, что return
операторы не достигаются.
Если вы знаете, что эти значения переменных не происходят, добавьте комментарий и обоснование, описывающие, почему вы не изменили код.
Для получения дополнительной информации смотрите Допущения анализа Code Prover.
Можно отключить эту проверку. Если вы отключаете эту проверку, Polyspace принимает следующее о функции возврат значением, если функция отсутствует return
операторы:
Если возврат значение является переменной, не являющейся указателем, она имеет полный диапазон значений, разрешенных ее типом.
Если возврат значение является указателем, это может быть NULL
-значен или указывает на блок памяти с неизвестным смещением.
Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks)
.