首页 > 解决方案 > VB6 redim 错误“此数组已修复或暂时锁定”

问题描述

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

类似的东西

宣言:

public g() 作为分支

初始化:

重新调整 g (1 到 3)
设置 g(1) = br1
设置 g(2) = br2
设置 g(3) = br3

sub的代码调用

调用 chg (g(2))

Public Sub chg (ByRef br As branch)
r = UBound(g)
ReDim g (1 To r + 2)
... (其余代码)
End Sub

Redim 语句上的代码错误,错误文本为“此数组已修复或暂时锁定”。

为什么我不能改变这个子数组的大小?有什么不一样的?

标签: vb6dynamic-arrays

解决方案


从 MSDN 文档:

您尝试重新调整模块级动态数组的尺寸,其中一个元素已作为参数传递给过程。例如,在下面的代码中,ModArray 是一个动态的模块级数组,它的第 45 个元素通过引用传递给 Test 过程。

在这种情况下,不需要传递模块级数组的元素,因为它在模块中的所有过程中都是可见的。但是,如果传递了一个元素,则该数组将被锁定以防止为过程中的引用参数释放内存,从而在过程返回时导致不可预知的行为。

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

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


推荐阅读