我正在使用静态分析工具(CodeSonar)测试我的C ++ 11代码。
这是我的代码:
int weights_size = c * n * size * size;
int weights_memory_size = weights_size * sizeof(float);
if (IS_OVERFLOW_6(weights_memory_size, c, n, size, size, (int)sizeof(float))) {
overflow_error();
}
l.weights = (float*) calloc(weights_size, sizeof(float));
这是我的整数溢出检查宏代码:
#define IS_OVERFLOW_6(multipliedVal, val1, val2, val3, val4, val5) (((val1) > 0) && ((val2) > 0) && ((val3) > 0) && ((val4) > 0) && ((val5) > 0) && ((multipliedVal) > 0) && ((val1) == (((((multipliedVal) / (val2)) / (val3)) / (val4)) / (val5))) ? false : true)
这个宏适用于检查两个整数的乘法(宏IS_OVERFLOW_3,定义为
(((val1) > 0) && ((val2) > 0) && ((multipliedVal) > 0) && ((val1) == ((multipliedVal) / (val2))) ? false : true)
'工作正常'意味着CodeSonar工具没有抱怨。
然而,静态分析工具仍然抱怨IS_OVERFLOW_6检查。也就是说,该工具声称可能存在通过检查但是乘法仍然溢出的情况。
支票不足吗?或者静态分析工具是错误的吗?