Программа идентифицирует подмножество оранжевых проверок, которые, скорее всего, являются ошибками времени выполнения. Если выбрать Критические проверки (Critical checks) в раскрывающемся списке в левой части панели инструментов панели Список результатов (Results List), можно просмотреть это подмножество.
Эти оранжевые проверки связаны с путями и ограниченными входными значениями. Здесь входные значения относятся к значениям, внешним по отношению к приложению. Примеры:
Входы в функции, вызываемые генерируемой магистралью. Для получения дополнительной информации о функциях, вызываемых генерируемой основной системой, см. Functions to call (-main-generator-calls).
Глобальные и изменчивые переменные.
Данные, возвращенные упорной функцией. Данные могут представлять собой значение, возвращаемое функцией, или параметр функции, измененный с помощью указателя.
В следующем примере показана оранжевая проверка, связанная с путем, которая может быть идентифицирована как потенциальная ошибка времени выполнения.
Рассмотрим следующий код.
void path(int x) {
int result;
result = 1 / (x - 10);
// Orange division by zero
}
void main() {
path(1);
path(10);
}
... Warning: scalar division by zero may occur ...
Это подразделение нулевой проверкой result=1/(x-10) оранжевый, потому что:
path(1) не вызывает деления на нулевую ошибку.
path(10) вызывает деление на нулевую ошибку.
Polyspace ® указывает определенное деление на нулевую ошибку посредством ошибки неразрывного вызова наpath(10). При выборе красной проверки path(10), панель Сведения о результате (Result Details) содержит следующую информацию.
NTC .... Reason for the NTC: {path.x=10)Большинство входных значений может быть ограничено спецификациями диапазона данных (DRS). В следующем примере показана оранжевая проверка, связанная с ограниченными входными значениями, которые могут быть идентифицированы как потенциальная ошибка времени выполнения.
int tab[10];
extern int val;
// You specify that val is in [5..10]
void assignElement(int index) {
int result;
result = tab[index];
// Orange Out of bounds array index
}
void main(void) {
assignElement(val);
}Если для переменной указан диапазон данных PERMENT от 5 до 10 val, проверка генерирует оранжевую проверку индекса массива Out of bounds на tab[index]. На панели Сведения о результате (Result Details) представлена информация о потенциальной ошибке:
Warning: array index may be outside bounds: [0..9] This check may be an issue related to bounded input values Verifying DRS on extern variable val may remove this orange. array size: 10 array index value: [5 .. 10]
В следующем примере показана оранжевая проверка, связанная с неограниченными входными значениями, которые могут быть идентифицированы как потенциальная ошибка времени выполнения:
int tab[10];
extern int val;
void assignElement(int index) {
int result;
result = tab[index];
// Orange Out of bounds array index
}
void main(void) {
assignElement(val);
}Проверка создает оранжевую проверку индекса массива Out of bounds на tab[index]. На панели Сведения о результате (Result Details) представлена информация о потенциальной ошибке:
Warning: array index may be outside bounds: [0..9] This check may be an issue related to unbounded input values If appropriate, applying DRS to extern variable val may remove this orange. array size: 10 array index value: [-231 .. 231-1]