数据溢出是什么意思

数据溢出是什么意思,第1张

在计算机中,当要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出,这种现象叫做数据溢出。

例如,一数据源不断发送数据,进入缓存区,再从缓存端口输出。但是若数据写入的速率大于数据读出的速率,那么缓存器迟早要被数据占满,若不采取一定措施(如暂停写入数据),那么数据就会溢出,这样会导致数据的丢失。

数据溢出的的原因

当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了N字节大小的内存缓冲区,随后又向其中复制超过N字节的数据),内存缓冲区就可能会溢出。

最重要的是,C/C++编译器开辟的内存缓冲区常常邻近重要的数据结构。假设某个函数的堆栈紧接在在内存缓冲区后面时,其中保存的函数返回地址就会与内存缓冲区相邻。

此时,恶意攻击者就可以向内存缓冲区复制大量数据,从而使得内存缓冲区溢出并覆盖原先保存于堆栈中的函数返回地址。这样,函数的返回地址就被攻击者换成了他指定的数值;一旦函数调用完毕,就会继续执行“函数返回地址”处的代码。

监视哨的设置是为了防止数组下标溢出。 采用直接插入法排序,它是从右边到左边进行比较的,如果B中的值为最大数时,那它就放在最右边了。但如果不是的话,本来A中最右边的值会向后移一位,而此时B中的值赋为监视哨,按照右至左的顺序,跟A中的其余值比较,从而插入在恰当的位置,如果B中的值比A的所有值都小,那它就会跟监视哨比较,也就是跟自己比较,从而把自己放在了最左边了。 至于你说的MaxElemType应该就是采用宏定义的一个变量,类型是跟数组一样的。

找到是哪一列溢出了,把列的类型有smallint 修改为int 或者bigint;

溢出的原因是因为smallint存储值最大只能是32767 ,而你想插入的值大于这个值所以报错


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6422446.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-21
下一篇2023-03-21

发表评论

登录后才能评论

评论列表(0条)

    保存