#define MAX_MEMSEG 32764
typedef void (*ptrFunc)(int memseg);
ptrFunc operation = (ptrFunc)(0x003c);
void main(void) {
for (int i=1; i <= MAX_MEMSEG; i++)
operation(i);
}В этом примере указатель функции operation приводится к содержимому ячейки памяти. Polyspace ® не может определить, содержит ли местоположение переменную или код функции и правильно ли введена функция. Следовательно, когда указательoperation используется в вызове функции, проверка состояния корректности - оранжевый.
После оранжевой проверки состояния корректности из-за абсолютного использования адреса программное обеспечение предполагает, что следующие переменные имеют полный диапазон значений, разрешенных их типом:
Переменная, сохраняющая возвращаемое значение из вызова функции.
В следующем примере программное обеспечение предполагает, что возвращаемое значение operation является полным диапазоном.
typedef int (*ptrFunc)(int);
ptrFunc operation = (ptrFunc)(0x003c);
int main(void) {
return operation(0);
}
Переменные, которые могут быть изменены с помощью аргументов функции.
В следующем примере указатель функции operation принимает аргумент указателя ptr указывает на переменную var. После звонка на operation, программное обеспечение предполагает, что var имеет значение полного диапазона.
typedef void (*ptrFunc)(int*);
ptrFunc operation = (ptrFunc)(0x003c);
void main(void) {
int var;
int *ptr=&var;
operation(ptr);
}