算术运算导致溢出

Posted

技术标签:

【中文标题】算术运算导致溢出【英文标题】:Arithmetic operation resulted in an overflow 【发布时间】:2011-05-17 17:21:30 【问题描述】:

当我发送时:

Result = CInt(NetApiBufferFree(pBuffer))

我收到(有时)这个错误:

Arithmetic operation resulted in an overflow.

这究竟是什么意思?以及如何解决?

【问题讨论】:

【参考方案1】:

表示CInt参数超出Integer的范围,-0x80000000到0x7FFFFFFF 当NetApiBufferFree 返回错误时会发生这种情况:错误代码大于 0x80000000。

没有无符号的int32类型,所以用CLng代替CInt


关于错误来源。您应该找出您得到的错误代码:调用 MsgBox 或将其记录到文件,或使用断点。接下来找到它的描述。如果它对您没有帮助(例如错误将是 E_FAIL),请添加代码以检查 pBuffer 值是否有效 - 它没有被某些东西修改,也没有被释放。为NetApiBuffer* 调用添加日志记录。

【讨论】:

+1。还要确保Result 实际上被声明为Long。另外打开Option Strict,以便编译器在您可能易受此类攻击时发出警告。 亲爱的 Abyx 非常感谢您的回答准确但它并没有指出我的问题的根源,我的意思是我必须做什么才能处理这个错误?目前我已经暂停了 Buffer Free 的指令,直到我看到如何处理它。你能帮我解决这个问题吗?【参考方案2】:

最佳答案是将“double”替换为“Int16/Int32/Int64”

有时文件转换需要大量的数字.. double 从来没有最大范围。

【讨论】:

以上是关于算术运算导致溢出的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 算术运算导致溢出这是咋回事儿?

警告 C26451 算术溢出:使用运算符“-”

javascript算术溢出

c/c++ 运算溢出问题

无符号数的算术运算的溢出问题

整数算术溢出问题的分析