Run-time error '10'

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Run-time error '10'

Сообщение JohnK » 14.02.2007 (Ср) 0:50

Run-time error '10': This array is fixed or temporarily locked

Выскакивает не всегда, но бывает:

Dim kkk() as mytype
....

Redim kkk(100)

.....

Redim Preserve kkk(Ubound(kkk)-1)
' В этом месте :( Причем Ubound(kkk)>0

Причем код может работать долгл и счастливо, а может вылетить вот в такую ошибку. В чем прикол?

Так как массив динамический, то значит он временно недоступен (locked), может потому что пользовательского типа?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.02.2007 (Ср) 8:05

Больше кода давай, а то телепатов няма!

З.Ы. Навскидку: А мож Option Explicit не стоит?
Весь мир матрица, а мы в нем потоки байтов!

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 14.02.2007 (Ср) 22:57

Option Explicit есть

Дело в том что все это работает... Возможно массив большой и при частом вызове при сортировке (удалении элемента) не успев присвоить переходит к усечению размера?

Запись массива примерна такого состава:
Код: Выделить всё
Public Type User_type
q As Integer
w As String
e As String
r As String
t As Long
y As Long
u As Integer
i As Boolean
o  As Boolean
p As Long
a As String
s As Boolean
f As Boolean
g As Boolean
h As Boolean
j As String
k As Long
l As Boolean
z As Boolean
  x As Boolean
c As Boolean
v As Boolean
b As Integer
n As Long
m As Boolean
qq As Long
ww As Long
End Type


Не то чтобы сильно большой, но и не маленький.

Код: Выделить всё
array() as UserType
...

Public Sub DeleteFrom Array(Ind As Integer)
Dim i As Integer

If Ind< UBound(array()) Then
For i = Ind To UBound(array()) - 1
   array(i) = array(i + 1)
Next i
End If

ReDim Preserve array(UBound(array()) - 1)

End Sub
[/code]
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.02.2007 (Ср) 23:07

JohnK писал(а):Дело в том что все это работает... Возможно массив большой и при частом вызове при сортировке (удалении элемента) не успев присвоить переходит к усечению размера?

До тех пор, пока квантовый компьютер не изобрели, программы выполняются последовательно.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 14.02.2007 (Ср) 23:16

В поиск по DebugBreak.
Заодно читать, для чего эту функцию обычно применяют.
Заодно думать, чем тебе это может помочь.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 14.02.2007 (Ср) 23:19

tyomitch В курсе, но иногда посешают мысли о мистификации Виндоузз

Ennor
СПАСИБО!!!! :(
А по-существенней? Почему массив блокирован? Ты думаешь Debug поможет?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 14.02.2007 (Ср) 23:26

Наверняка что-то не догавариваешь.
Хотя-бы UBound(array()) в отдельную переменную занеси.
А то у тебя в цикле может еще что-то с размерностью происходит а мы и не видим.

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 14.02.2007 (Ср) 23:34

И вообще,как это, слово Аrray служит именем переменной?
P.S. Начинаю подозревать причины неработоспособности кода.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 14.02.2007 (Ср) 23:54

Ладно, Google мне товарищ...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 15.02.2007 (Чт) 2:30

Эта функция применяется для остановки скомпилированного EXE и отладки его уже не в среде Visual Basic, а в штатном системном дебаггере.

Для такой отладки нужно включить генерацию Debug Info - галка в свойствах проекта. Иначе твой исходный код на VB будет тебе недоступен, и толку будет ноль.

У меня бывали случаи, когда один и тот же код на VB6 по-разному вел себя в зависимости от того, запускается он из-под IDE или же в скомпилированном EXE. Как правило, подобное поведение свидетельствует о жуткой кривости архитектуры программы :). Не исключено, что у тебя именно этот случай. Я бы даже сказал - очень похоже :).

Вообще, слишком долго объяснять, что и как именно делать. А искать советую на этом же форуме - вверху ссылка на поиск. Красным шрифтом. Наверняка когда-нибудь уже описывалась последовательность действий...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 106

    TopList