VB6 redim error "Этот массив исправлен или временно заблокирован" - PullRequest
0 голосов
/ 22 января 2019

У меня есть глобальная переменная массива g (), которая начинается с 3 значений объекта. Затем я вызываю подпрограмму, которая использует в качестве входных данных один из элементов в g, и для которого необходимо создать дополнительные элементы в g, а также обновить предоставленный элемент.

Что-то вроде

Декларация:

Публичный г () Как филиал

Инициализация:

ReDim г (от 1 до 3)
Установите g (1) = br1
Установите g (2) = br2
Установите g (3) = br3

Код вызова суб

вызов chg (g (2))

Sub

Public Sub chg (ByRef br As ветка)
r = UBound (г)
Восстановить г (1 К р + 2)
... (остальной код)
End Sub

Ошибки кода в операторе Redim с текстом ошибки «Этот массив исправлен или временно заблокирован».

Почему я не могу изменить размер массива в этом сабе? Что делать по другому?

1 Ответ

0 голосов
/ 22 января 2019

Из документации 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

Одна из идей будетпередать индекс массива вместо самого объекта.

...