一个vb.net数组越界的问题

dim a(4,1) as integer
min = a(0, 0) : time = a(0, 1) : record = 0(其他变量声明省了)
For x = 0 To 4
If a(x, 0) < min Then
min = a(x, 0) : time = a(x, 1) : record = x
End If
Next
alltime = time : presenttime = min + time
a(x, 0) = Nothing : a(x, 1) = Nothing‘说这两个都越界了不明白
我是菜鸟。

测试结果如图所示。现象与你说明的情况是一样的。

原因分析:你所声明的数组a(4,1)实际上是a(0 to 4, 0 to 1)。在截图下方的自动窗口栏可以看到,当程序运行完For循环后,x的值已经变为5,所以a(x,0)即为a(5,0),该变量与你声明的a(4,1)也就是a(0 to 4, 0 to 1)比较,发现下标已经超限,也就是程序报出的错误:索引超出了数组界限。

结束:a(x, 0) = Nothing : a(x, 1) = Nothing,不太理解该语句的主要目的,如果是为了释放内存,那么应该直接a=Nothing。

欢迎交流如有需要,请留下QQ欢迎交流。

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-22
简单点说是因为 For循环结束后 x 会大于你所指定的4,这时x是5。所以当x超过了你设定的数组范围0至4,就会数组越界。

解决方法也很简单,用x-1即可
a(x-1, 0) = Nothing : a(x-1, 1) = Nothing
第2个回答  2010-06-22
首先要知道越界是什么。举个例子,你的数组只有a(0)-a(10),但是你偏要访问a(15),这就叫越界。

你这个代码中,关键之处在于,For循环会在每次执行完循环体后将循环变量加上步长,然后再和终止值比较。
所以当循环结束后,x的值是5。也就是说你试图访问a(5,0)和a(5,1),但这两个数组元素是不存在。

一个vb.net数组越界的问题
当程序运行完For循环后,x的值已经变为5,所以a(x,0)即为a(5,0),该变量与你声明的a(4,1)也就是a(0 to 4, 0 to 1)比较,发现下标已经超限,也就是程序报出的错误:索引超出了数组界限。

vb.net中split函数数组越界的问题!
Dim sr As StreamReader = File.OpenText("E:\\1.txt") Dim input As String input = sr.ReadLine() While (Not input Is Nothing And i <= 16) title(i) = Trim(input) title2(i) = title(i).Replace(Space(3), vbCrLf) input = sr.ReadLine() i = i + ...

VB中实时错误9:“下标越界”是什么意思?
意思是:没有给数组分配空间。造成的原因:引用了不存在的数组元素.下标可能比下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。声明...

请思考如果在使用数组时,下标越界了,会出现什么情况?
最好的情况是指向一个没有用到的内存区域,这样不会对应用程序有影响,最坏的情况是指向的程序的核心区域,会导致系统崩溃。指针越界,就说明这个指针已经不在数组范围内了,指向了不属于数组的区域,再对他进行操作也不是对数组里面的元素进行操作,而是对一个未知的单元进行操作。(感觉真恐怖的!)...

vb 循环下标越界
问题1:Command5_Click事件中,q、m数组维数应固定(如果不固定,需要在ReadQQMail中对qq和mail设定维数)。Dim q(3) As Long 问题2:根据你的代码,m应为邮箱地址,定义为Long是明显错误的。Dim m(3)问题3:象你这样需要“看看”代码的问题,尽量加点分...比较简单的程序没有必要指定数据的类型...

vb中下标越界什么意思
下标越界是指只能在定义的范围内访问数组元素和集合成员。一、产生下标越界的原因 1、下标可能比下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查...

在VB中,数组下标的默认下界是 什么? 。
VB中定义数组的起始下标默认从0开始。用Option Base 1语句将数组默认起始下标设置为 1。(1)不使用Optioan Base 语句,数组起始下标默认为 0 Option Explicit' 没有用 Option Base 语句,数组下标从0开始' 因此,数组 a 包含了 11 个元素Dim a(10) As IntegerPrivate Sub Form_Load() Dim i...

我在12。21要去一家软件公司笔试,范围大约是VB,JAVA方面的,劳驾帮忙给...
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括 2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问 null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员 可以创建自己...

编程中为什么需要异常处理?
全程变量ErroNo常常用来反映一个异常事件的类型。但是,这种错误处理机制会导致不少问题。 Java通过面向对象的方法来处理例外。在一个方法的运行过程中,如果发生了例外,则这个方法生成代表该例外的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一例外。我们把生成例外对象并把它提交给运行时系统的...

这个是什么问题?
语法为net [start|stop]service_name 例如,可以使用该名利停止或启动Microsoft Indexing Service;即net stop cisvc和net start cisvc。它可用与CMD类型的$echo SSI指令,如果网页拒绝匿名访问并且用户提供了一个具有目标服务器上Administrator权限的帐户信息的话。 NET命令的所有选项和开光的列表可在Windows2000帮助文件中找...

相似回答
大家正在搜