exponenta event banner

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

Выполните одно или несколько из этих действий до тех пор, пока не будет определено исправление для проверки Неверное объектно-ориентированное программирование. Описание проверки и примеры кода см. в разделе Incorrect object oriented programming.

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

Шаг 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) и выберите Поиск (Search for). function_name во всех исходных файлах.

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

    Чистое virtual имеет объявление, например:

    virtual void func() = 0;

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

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

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

  • Щелкните правой кнопкой мыши указатель функции на панели Источник (Source) и выберите Поиск всех ссылок (Search For All References).

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

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

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

Если при вызове функции появляется красная проверка Неверное объектно-ориентированное программирование obj.func(), трассировка потока данных для obj. Посмотреть, если obj не инициализирован ранее.