避免整数乘法溢出3 +整数

时间:2018-04-30 04:23:57

标签: c++ c++11 integer-overflow

我正在使用静态分析工具(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检查。也就是说,该工具声称可能存在通过检查但是乘法仍然溢出的情况。

支票不足吗?或者静态分析工具是错误的吗?

0 个答案:

没有答案