VB6 redim错误“此阵列已固定或暂时锁定”

时间:2019-01-22 18:49:33

标签: vb6 dynamic-arrays

我有一个以3个对象值开头的全局数组变量g()。 然后,我调用一个子项,该子项使用g中的一项作为输入,并且需要在g中创建其他项,并更新提供的项。

类似的东西

声明:

  

公共g()作为分支

初始化:

  

ReDim g(1到3)
      设置g(1)= br1
      设置g(2)= br2
      设置g(3)= br3

子程序的代码调用

  

致电chg(g(2))

Sub

  

公共Sub chg(ByRef br作为分支)
      r = UBound(g)
      ReDim g(1至r + 2)
      ...(其余代码)
  结束

Redim语句上的代码错误,错误文本为“此数组是固定的或临时锁定的”。

为什么我不能更改此子数组的大小?有什么不同?

1 个答案:

答案 0 :(得分:3)

从MSDN文档中:

  

您试图重新定义模块级动态数组,其中一个   元素已作为参数传递给过程。例如,在   在下面的代码中,ModArray是动态的模块级数组,其   引用测试程序传递了第四十五个元素。

     

在此无需传递模块级数组的元素   情况,因为它在模块中的所有过程中都是可见的。然而,   如果传递了一个元素,则该数组将被锁定以防止释放   该过程中参考参数的内存不足,导致   该过程返回时出现不可预测的行为。

Dim ModArray() As Integer    ' Create a module-level dynamic array.

Sub AliasError()
   ReDim ModArray(1 To 73) As Integer
   Test ModArray(45)    ' Pass an element of the module-level array to the Test procedure.
End Sub

Sub Test(SomeInt As Integer)
   ReDim ModArray (1 To 40) As Integer  ' Error occurs here.
End Sub

一个想法是传递数组的索引,而不是对象本身。