Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Null this-pointer calling method. Для получения описания примеров проверки и кода смотрите Null this-pointer calling method
.
Иногда, особенно для оранжевого чека, можно определить, что чек представляет не реальную ошибку, а Polyspace® предположение, что не соответствует действительности для вашего кода. Если для ослабления допущения можно использовать опцию анализа, повторите верификацию с помощью этой опции. В противном случае можно добавить комментарий и обоснование в результат или код.
Общий рабочий процесс, который применяется ко всем проверкам, см. в разделе Интерпретация результатов Prover кода в пользовательском интерфейсе рабочего стола Polyspace.
Выберите проверку на панели Results List. На панели Result Details отображаются дополнительные сведения о проверке.
Вы можете увидеть:
Непосредственная причина проверки.
В этом примере указатель используется для вызова метода addNewClient
можно NULL
.
Вероятная первопричина проверки, если она указана.
В этом примере проверка может быть связана с упрямой функцией returnPointer
.
Найдите путь выполнения, где указателю либо назначено значение NULL
или присвоенные значения из неопределенной функции или неизвестных входных параметров функции. В последнем случае программное обеспечение принимает, что указатель может быть NULL
.
Выберите проверку на панели Results List.
Если на панели Result Details отображается последовательность команд, ведущих к проверке, выберите каждую инструкцию и вернитесь к первопричине.
Если на панели Result Details отображается номер линии вероятной причины проверки, в пользовательском интерфейсе Polyspace щелкните правой кнопкой мыши панель Source. Выберите Go To Line.
Если панель Result Details не приводит вас к первопричине, с помощью панели Source в пользовательском интерфейсе Polyspace найдите, как можно NULL
указатель для вызова метода.
Щелкните правой кнопкой мыши указатель мыши и выберите Search For All References.
Найдите каждый предыдущий образец, где указателю назначен адрес.
Для каждого образца на панели Source поместите курсор на указатель мыши. Подсказка указывает, можно ли NULL
указатель мыши.
Возможное исправление: Если указатель можно NULL
, поместите чек на NULL
сразу после назначения.
if(ptr==NULL) /* Error handling*/ else { . . }
Если указатель не NULL
, смотрите, происходит ли назначение только в ветви условного оператора. Выясните, когда эта ветвь не выполняется.
Возможное исправление: назначьте допустимый адрес указателю во всех ветвях условного оператора.