整数溢出是指在某些计算机数据类型中,当它们到达其适用范围的末端时,它们的符号从正变为负,或反之亦然。在计算机范围中,整数数据类型具有循环范围,当它们达到其范围的一端时,它们会立即移动到其范围的另一端。这也称为整数...
整数溢出是指在某些计算机数据类型中,当它们到达其适用范围的末端时,它们的符号从正变为负,或反之亦然。在计算机范围中,整数数据类型具有循环范围,当它们达到其范围的一端时,它们会立即移动到其范围的另一端。这也称为整数溢出。C没有显式的数组边界检查。有符号整数可以包含-231到(231)-1之间的值范围。此整数的值不能为(-231)-1;相反,它递增到的下一个数字是在其范围的另一端:(231)-1).在其范围的末尾从负变为正是整数溢出的一个例子。同样地,一个整数的值不能是231;这个值会切换到它的范围的另一端变成-231。这个溢出在编程时会产生严重的后果。一个数组只能在整数类型允许,负索引不计算在内。如果程序员试图创建一个大于整数类型允许的数组,则可能会发生严重的内存错误,因为整数溢出会导致负索引。这在没有显式数组边界检查的语言中尤其危险,与C一样,当发生整数溢出时,也会发生相关类型的溢出,如缓冲区溢出、堆溢出和堆栈缓冲区溢出。在所有这些情况下,整数溢出会用比这些结构所能容纳的更多的数据来覆盖内存结构。这些溢出,在简单的程序中,除了引起无效的读或写错误外,不要做太多的事情。然而,黑客对这个问题的处理会导致内存错误,从而导致更严重的问题。在大多数简单的程序中,整数溢出不是主要问题整数类型的限制足够大,除非同时处理大量数据,否则溢出问题不会起作用。在某些情况下,可以通过使用更大范围的更大数据类型来缓解溢出,如递增计数器的情况。理论上,较大的数据类型可以,最终会遇到同样的溢出问题,但随着数据类型范围的增大,出现这种情况的可能性也会越来越小。每个整数数据类型范围的大小至少是下一个最小值的两倍,因此有足够的空间存储额外的数据
-
发表于 2020-08-07 13:24
- 阅读 ( 1958 )
- 分类:电脑网络