尝试在除法或模运算中使用零作为除数会导致运行时错误。错误处理或争用条件无效时,经常出现除以零的情况,并且通常会导致程序异常终止。在 C/C++ 代码中将值用作除法或模运算的除数之前,必须进行检查以确认值不为零。

DBZ 检查器会查找零常量值用作除法或模运算除数的实例。

DBZ.CONST.CALL 检查器会标记以下情况:零常量值直接传递到函数调用,并且可能在不进行零值检查的情况下用作除法或模运算的除数。

整数除以零通常会导致进程失败或异常。运算也可能成功,但会给出错误答案。浮点数除以零则更为微妙,具体取决于编译器的实施情况。如果编译器遵循 IEEE 浮点标准 (IEEE 754),则浮点数除以零会得到明确的结果。然而,C 和 C++ 标准不会强制遵循 IEEE 754。因此,浮点数除以零在 C 和 C++ 中具有未定义的行为,可能导致进程失败或异常。

异常处理无效时,经常出现除以零的情况。为避免此漏洞,在将值用作除法或模运算的除数之前,检查该值是否为零。

Klocwork 在第 11 行生成问题报告,指出零常量值直接传递到函数 compute_mean 并在该函数中作为第 7 行中除法运算的除数。除以零会产生无法预料的意外结果。

前一代码段中的问题已修复:在第 3 行检查输入变量 size 是否有零常量值的异常情况,同时防止在该特定情况中出现除法运算。