一个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‘说这两个都越界了不明白
我是菜鸟。
最新回答
化妆去夜店∮

2024-11-07 16:28:10

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

原因分析:你所声明的数组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欢迎交流。

忘了我就好

2024-11-07 16:16:08

简单点说是因为 For循环结束后 x 会大于你所指定的4,这时x是5。所以当x超过了你设定的数组范围0至4,就会数组越界。

解决方法也很简单,用x-1即可
a(x-1, 0) = Nothing : a(x-1, 1) = Nothing
拾柒

2024-11-07 15:27:43

首先要知道越界是什么。举个例子,你的数组只有a(0)-a(10),但是你偏要访问a(15),这就叫越界。

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