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

Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки 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, for или блоках while. Идентифицируйте условия, когда функция не введет блок.

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

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

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

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

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

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

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

    • Операторы Avoid 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).