2. 变量在实际应用中出现的问题及解决方案
2.1 变量在使用时出现的溢出问题
溢出是计算机的一个可以补救的漏洞,全名:缓存区溢出漏洞。在计算机中,有一个叫缓存区的地方,它是用来存储用户输入的数据的,缓冲区的长度是被事先设定好的且容量不变,假如用户输入的数据超过了缓冲区的长度,那么就会溢出,而这些溢出的数据就会覆盖在合法的数据上。
这时我们也可以利用漏洞写入恶意数据,这就是常说的溢出。VB中常见的溢出有:内存溢出、计算溢出、堆栈空间溢出、Long溢出、数据溢出、VB错误6溢出等。这里将详细介绍以下几点:
2.1.1 VB错误6溢出
大多数VB程序设计教程都很少提及赋值和计算中的“溢出”问题。然而在学生的编程中,“溢出”却是不可回避的一个问题。不正确的变量类型使用可能导致“溢出”。例如:
[例1]Private Sub Form_Click()
Dim pi As Single, n As Integer, t As Single
pi = 2
For n = 1 To 10
t = (2 * n) ^ 2 / ((2 * n - 1) * (2 * n + 1))
pi = pi * t
Next n
Print "n=10时,π="; pi
pi = 2
For n = 1 To 100
t = (2 * n) ^ 2 / ((2 * n - 1) * (2 * n + 1)) ‘此句发生溢出
pi = pi * t
Next n
Print "n=100时, ="; pi
……
End Sub
当程序运行到程序中加注释的语句时会产生运行期错误“实时错误'6':溢出”。学生们都注意到变量t用来保存公式的通项,应该使用精度比较高的实型数据,而认为n变量的取值分别是1~10、1~100、1~1000,当然使用整型(integer)就可以了。其实,错误就出在这里。为了解释这个问题,我们举一个简单的例子,如下程序段:
[例2] Private Sub Command1_Click()
Dim c As Long
c = 3 2* 1024
End Sub
程序运行时会发生溢出错误。大部分学生会认为,变量c已经是长整型了,足以放的下32×1024的积,怎么还会溢出呢?其实,VB在做数值运算时,会先开辟一个内存地址来存放计算结果,然后再传送到指定的变量中。如上面的程序,变量c虽然是长整型,其可存放数值的范围是(-2147483648,+2147483647),但VB做计算时,将32判断为整数,1024也判断为整数,就任意在内存的某个位置开辟2Byte大小的空间来存放32×1024的值,然后再回存至变量c。但32×1024(即32768)已超过任意在内存的某个地址开辟的2Byte的大小,故溢出。
怎样解决溢出问题呢?答案就是转变数据的类型。将例2的程序段改为:本文来自辣*文!论(文&网,
毕业论文 www.751com.cn
Private Sub Command1_Click()
Dim c As Long
c = CLng(3 2)*CLng( 1024)
End Sub
就可以正常计算了。理解了VB做数值运算的内部机理,我们就可以重新审视例1。当程序发生溢出错误时,我们点击“调试”,出错的语句会高亮度显示,我们把光标放在n变量上,可以发现溢出时n的值为91,n=91时,表达式(2 * n - 1) * (2 * n + 1)的值为33123。通过例2我们得知,n为整型变量,计算机会认为表达式2*n-1和2*n+1也是整型,所以会在内存中开辟2Byte的空间暂时存储表示式(2 * n - 1) * (2 * n + 1)的值,当n取值91时,乘积大于整型变量的取值范围-32768~+32767,故溢出。解决的办法可以有多种:
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
浅谈VB中的变量使用 第5页下载如图片无法显示或论文不完整,请联系qq752018766