Обнаружьте указатель вершины стека, разыменовывают внешний осциллограф (-detect-pointer-escape)

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

Описание

Эта опция влияет на анализ Программы автоматического доказательства Кода только.

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

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Check Behavior.

Командная строка: Используйте опцию -detect-pointer-escape. Смотрите информацию о Командной строке.

Почему использование эта опция

Используйте эту опцию, чтобы включить обнаружение Escape указателя.

Настройки

На

Проверка Illegally dereferenced pointer выполняет дополнительную задачу помимо ее обычных спецификаций. Когда вы разыменовываете указатель, проверка также определяет, получаете ли вы доступ к переменной вне ее осциллографа через указатель. Проверка:

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

    Например, вы разыменовываете указатель ptr в функциональном func, который называется дважды в вашем коде. В обоих вызовах, когда вы выполняете разыменовать *ptr, ptr указывает на переменные вне их осциллографа. Поэтому проверка Illegally dereferenced pointer является красной.

  • Оранжевый, если к только некоторым переменным, на которые указывает указатель, получают доступ вне их осциллографа.

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

В следующем коде, если вы включаете эту опцию, Polyspace® Code Prover™ производит красный Illegally dereferenced pointer, проверяют *ptr. В противном случае, Illegally dereferenced pointer начинают работу, *ptr является зеленым.

void func2(int *ptr) {
    *ptr = 0; 
}

int* func1(void) {
    int ret = 0;
    return &ret ;
}
void main(void) {
    int* ptr = func1() ;
    func2(ptr) ;
}
Панель Result Details отображает сообщение, указывающее, что к ret получают доступ вне его осциллографа.

От (значения по умолчанию)

Когда вы разыменовываете указатель, проверка Illegally dereferenced pointer не проверяет на то, получаете ли вы доступ к переменной вне ее осциллографа. Проверка является зеленой, даже если указатель разыменовывает, вне переменной scope, пока это удовлетворяет требования:

  • Указатель не является ПУСТЫМ.

  • Указатель указывает в буфере памяти.

Информация о командной строке

Параметр: -detect-pointer-escape
Значение по умолчанию: 'off'
Пример (программа автоматического доказательства кода): polyspace-code-prover -sources file_name -detect-pointer-escape
Пример (сервер программы автоматического доказательства кода): polyspace-code-prover-server -sources file_name -detect-pointer-escape

Представленный в R2015a