Рассмотрите и зафиксируйте возвращаемое значение не инициализированные проверки

Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Return value not initialized. Существует несколько способов зафиксировать эту проверку. Для описания проверки и примеров кода, смотрите Return value not initialized.

Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.

Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.

Шаг 1: интерпретируйте информацию о проверке

Выберите проверку на панели Results List. На панели Result Details просмотрите дополнительную информацию о проверке.

Просмотрите вероятную причину проверки, если упомянуто на панели Result Details.

В предыдущем примере программное обеспечение идентифицирует заблокированную функцию, inputRep, как вероятная причина.

Возможная фиксация: Чтобы избежать проверки, ограничьте значение аргумента или возвращаемое значение inputRep. Например, задайте тот inputRep возвращает значения в определенной области значений, например, 1..10. Для получения дополнительной информации смотрите Заблокированные Функции.

Шаг 2: определите первопричину проверки

Определите первопричину регистрации тела функции. Можно выполнить следующие шаги в пользовательском интерфейсе Polyspace только.

  1. Перейдите к функциональному определению.

    Щелкните правой кнопкой по вызову функции, содержащему проверку. Выберите Go To Definition, если опция существует.

  2. В теле функции проверяйте если return оператор происходит перед закрывающей фигурной скобкой функции.

  3. Если return оператор не существует:

    1. На панели Search ищите слово return, или вручную просмотрите тело функции путем прокрутки и ищите return операторы.

    2. Для каждого 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.

Шаг 3: ищите частые причины проверки

Ищите частые причины проверки Return value not initialized.

  • Смотрите если return операторы появляются в if-elseдля или while блоки. Идентифицируйте условия, когда функция не введет блок.

    Например, функциональная сила не вводят while блокируйтесь для определенных входных параметров функции.

    Возможная фиксация:

    • Смотрите, можно ли поместить return оператор в конце тела функции.

    • В противном случае определите, как избежать условия, когда функция не вводит блок.

      Например, если функция не вводит блок для определенных входных параметров, смотрите, необходимо ли передать различные входные параметры.

  • Смотрите, есть ли у вас построения кода, такие как goto то прерывание нормальный поток управления. Смотрите, существуют ли условия когда return операторы в вашей функции не могут быть достигнуты из-за этих построений кода.

    Возможная фиксация:

    • Избегайте goto операторы. Для получения информации о том, как осуществить эту практику, смотрите Number of Goto Statements.

    • В противном случае определите, как избежать условия когда return операторы в вашей функции не могут быть достигнуты.

Шаг 4: проследите проверку до предположения Polyspace

Смотрите, можно ли проследить оранжевую проверку до предположения Polyspace, которое происходит ранее в коде. Если предположение не сохраняется в вашем случае, добавьте комментарий или выравнивание в вашем результате или коде. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.

Например, у вас есть return оператор в ветвях if-elseif блокируйтесь, но у вас нет итогового else блок. Условие вы тестируете в if-elseif блоки включают переменные, полученные из неопределенной функции. То:

  1. Polyspace принимает это для определенных значений тех переменных, ни одного из if-elseif блоки вводятся.

  2. Поэтому возможно что return операторы не достигнуты.

  3. Если вы знаете, что те значения переменных не происходят, добавьте комментарий и выравнивание, описывающее, почему вы не изменили свой код.

Для получения дополнительной информации смотрите Аналитические Предположения Программы автоматического доказательства Кода.

Отключение этой проверки

Можно отключить эту проверку. Если вы отключаете эту проверку, Polyspace принимает неотступно следование за функциональным возвращаемым значением, если функция пропускает return операторы:

  • Если возвращаемое значение является неуказательной переменной, ему позволил полный диапазон значений его тип.

  • Если возвращаемое значение является указателем, это может быть NULL- оцененный или точка блоку памяти при неизвестном смещении.

Для получения дополнительной информации смотрите Disable checks for non-initialization (-disable-initialization-checks).