Просмотрите и исправьте неправильные объекты программирования

Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Incorrect object oriented programming. Для получения описания примеров проверки и кода смотрите Incorrect object oriented programming.

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

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

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

Вы можете увидеть:

  • Непосредственная причина проверки. Для образца:

    • Вы высмеиваете указатель на функцию, который имеет значение NULL или точки к недопустимой функции представителя.

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

    • Вы называете чистую virtual Представитель функцию класса из конструктора классов или деструктора.

    • Вы вызываете функцию представителя с помощью неправильного this указатель.

      Чтобы увидеть, почему this указатель может быть неправильным, см Incorrect object oriented programming.

  • Вероятная первопричина проверки, если она указана.

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

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

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

ОшибкаКак найти первопричину
Вы высмеиваете указатель на функцию, который имеет значение NULL.

Щелкните правой кнопкой мыши указатель на функцию и выберите Search For All References. Найдите образец, где вы назначаете NULL на указатель на функцию.

Вы высмеиваете указатель на функцию, который указывает на недопустимую функцию представителя.

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

  1. Щелкните правой кнопкой мыши указатель на функцию на панели Source и выберите Search For All References. Найдите образцы, где вы:

    • Задайте указатель на функцию.

    • Присвойте адрес представителя функции указателю на функцию.

  2. Найдите определение функции представителя. Щелкните правой кнопкой мыши имя функции представителя на панели Source и выберите Go To Definition.

Вы называете чистую virtual Представитель функцию из конструктора или деструктора.

Найдите объявление функции представителя и определите, собираетесь ли вы объявить его как virtual или чистый virtual. Кроме того, определите, можно ли заменить вызов на чистый virtual функция с другой операцией, образец, вызов другой функции представителя.

  1. Щелкните правой кнопкой мыши имя функции на панели Source и выберите Поиск function_name во всех исходных файлах.

  2. Найдите объявление функции из результатов поиска.

    Чистая virtual функция имеет объявление, такое как:

    virtual void func() = 0;

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

Определите, почему this указатель неверен.

Например, если при вызове функции появляется красная проверка Incorrect object oriented programming ptr->func() и сообщение указывает, что this указатель неправильный, проследите поток данных для ptr.

  • Щелкните правой кнопкой мыши указатель на функцию на панели Source и выберите Search For All References.

  • Просмотрите все операции записи на указателе. Проверьте следующие проблемы:

    • Переключение между указателями несвязанных типов.

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

Если при вызове функции появляется красная проверка Incorrect object oriented programming obj.func(), проследите поток данных для obj. Посмотрите, obj не инициализирован ранее.