Страница: 1 |
Страница: 1 |
Вопрос: Что за ботва?
Добавлено: 20.04.06 21:24
Автор вопроса: Yeputons | ICQ: 278444762
Делаю динамический массив, и вдруд, когда я его переразмериваю второй раз, VB пишет:
Ошибка №10: "Массив фиксированный или временно заблокироован". Что это за ботва, и как с ней бороться?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 20.04.06 21:51
Как бороться?
Делать нефиксированный массив (динамический)
Номер ответа: 2
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #2
Добавлено: 20.04.06 23:30
В начале процедуры/модуля пишется:
А потом можно динамически какую угодно размерность задавать с помощью слова ReDim:
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 21.04.06 00:47
Судя по этим словам, чел в курсе...
Давай код - ни фига не понятно...
Номер ответа: 4
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #4
Добавлено: 21.04.06 05:45
Значит, массив оказывается временно заблокирован.
Номер ответа: 5
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #5
Добавлено: 21.04.06 09:42
А как я его мог заблокировать? И как его разблокировывать?
Код примерно такой:
Public RU() As String
Public RP() As String
Public RB() as string
...
While Not EF 'EF - флаг выхода из цикла
ReDim Preserve RU(St) As String
ReDim Preserve RP(St) As String
ReDim Preserve RB(St) As String
...
St = St + 1
Wend
...
Это все, где мои массивы изменяются, в остальном они только в правой части оператора присваивания
Номер ответа: 6
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #6
Добавлено: 21.04.06 11:14
А где тогда они получают значения?
А приложение многопоточное?
Короче, ты не всё показал. То, что ты привёл у меня работает:
Public arr1() As String
Public arr2() As String
Public arr3() As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim st As Integer
Do While st < 500
ReDim Preserve arr1(st)
ReDim Preserve arr2(st)
ReDim Preserve arr3(st)
st += 1
Loop
End Sub
End Class
Напиши, короткий запускающийся участок кода (без многоточий), чтобы мы могли вставить и увидеть, что реально не работает. Да ты и сам по ходу добавляя в него свой код, увидишь "место, где свет".
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 21.04.06 11:38
Да, по этому коду нихрена не скажешь.
Можешь попробовать SafeArrayUnlock, но это на свой страх и риск... Лучше ищи где сам перекосячил.
Номер ответа: 8
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #8
Добавлено: 21.04.06 12:22
криво юзать всякие там SafeArrayUnlock...
давай полный листинг выкладывай, а там и посмотрим
Номер ответа: 9
Автор ответа:
Yeputons
ICQ: 278444762
Вопросов: 71
Ответов: 179
Профиль | | #9
Добавлено: 21.04.06 18:14
Понял, что у меня за баг был. Исправил. Sne спасибо.
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 24.04.06 10:06
За то что не постился в этом топе. Остальные повелись как лохи