算术运算导致溢出
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 从来没有最大范围。
【讨论】:
以上是关于算术运算导致溢出的主要内容,如果未能解决你的问题,请参考以下文章