ABR - Klocworks False Alarms и неверный утилизация ошибок
Вопрос
Klocworkes сообщает об ошибке: -
"ABR - переполнение буфера, индекс массива «OIDSP» может быть вне границ.Множество «OIDSP» размером 64 может использовать индекс Значение (ы) -2 ..- 1. "
Для этой линии: -
if (check_index_lower_legality (len,-1))
{
oidsp[len-1] = specProb;
}
.
Когда check_index_lower_legality: -
bool check_index_lower_legality (int index, int offset)
/**
* This function checks that the index with the offset isn't
* below zero.
* If it is - returns 0 ;
* If isn't - returns 1 ;
**/
{
if ( (index + offset )<0) {
return 0;
}
return 1 ;
}
.
Однако нет ошибки, когда check_index_lower_legality
: -
(который кстати, неверный ответ, что касается значения смещения -2 или -1, будет реальная ошибка во время выполнения.
bool check_index_lower_legality (int index, int offset)
/**
* This function checks that the index with the offset isn't
* below zero.
* If it is - returns 0 ;
* If isn't - returns 1 ;
**/
{
if (index <=0) {
return 0;
}
return 1;
}
.
Любые идеи?
Решение
Я мог бы что-то упустить, но ваша функция (check_index_lower_legality) не модифицирует переменную «len», а также возврат от функции, используемой для доступа к вашему массиву, поэтому ваш фрагмент, как при условии, что будет отображаться правильно генерировать время выполненияПодолевание буфера (для значений Len <0).Может ли вы, возможно, расширить на примере, если вы считаете, что отчет быть действительно неверным?
Спасибо, Гвин.
Другие советы
Это ложная ошибка.Вам необходимо добавить дополнительную проверку для раскладки Лен> 1 всегда.
Так что вы можете пропустить эту ошибку, добавив совершенно нежелательное, если состояние.
if (check_index_lower_legality (len,-1))
{
if(len > 1)
oidsp[len-1] = specProb;
}
.
Или вы можете пометить эту ошибку как ложную тревогу и снова запустить klockworks.Это будет в наиболее вероятном смысле пропустить это в следующем отчете.
Я не думаю, что Klocworks может выполнить этот тип логики.Вам нужно будет сказать, что check_index_lower_legality ведет себя таким образом.