Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Null this-pointer calling method. Для описания проверки и примеров кода, смотрите Null this-pointer calling method
.
Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.
Выберите проверку на панели 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
, смотрите, происходит ли присвоение только в ветви условного оператора. Займитесь расследованиями, когда та ветвь не выполнится.
Возможная фиксация: Присвойте допустимый адрес указателю во всех ветвях условного оператора.