Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна. Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот. Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
function main()
is_run=true
row_color=15
t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)
t = CreateWindow(t_id)
SetWindowPos(t_id, 0, 0, 500, 500)
for i = 1, 15 do
InsertRow(t_id, i)
end
for k=1,15 do
SetCell(t_id, k, 0, tostring(k))
end
while is_run do
for k=1,15 do
SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
end
sleep(500)
end
end
function OnStop(stop_flag)
is_run=false
DestroyTable(t_id)
end
function main()
is_run=true
row_color=15
t_id = AllocTable()
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
AddColumn(t_id, row_color, tostring(row_color), true, QTABLE_STRING_TYPE,11)
t = CreateWindow(t_id)
SetWindowPos(t_id, 0, 0, 500, 500)
for i = 1, 15 do
InsertRow(t_id, i)
end
for k=1,15 do
SetCell(t_id, k, 0, tostring(k))
end
while is_run do
for k=1,15 do
SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here
end
sleep(500)
end
end
Mikhail написал: Вот такой код вызывает краш Квика версии 9.7.1.10 (в версии 8.13 все было ок) после остановки работы скрипта и закрытия созданного им окна. Предыстория - в связи с настойчивой рекомендацией БКС обновил квик. Пр запуске моего скрипта на новой версии Квик стал вылетать. Стал разбираться - и вот. Суть в том, что если имеется пропущенная колонка (переменная row_color=15 а не 1) то при остановке скрипта происходит вылет квика. Если поставить row_color=1 то все работает ок.
Код
function main ()
is_run = true
row_color = 15
t_id = AllocTable ()
AddColumn (t_id, 0 , "0" , true , QTABLE_STRING_TYPE, 15 )
AddColumn (t_id, row_color, tostring(row_color), true , QTABLE_STRING_TYPE, 11 )
t = CreateWindow (t_id)
SetWindowPos (t_id, 0 , 0 , 500 , 500 )
for i = 1 , 15 do
InsertRow (t_id, i)
end
for k = 1 , 15 do
SetCell (t_id, k, 0 , tostring(k))
end
while is_run do
for k = 1 , 15 do
SetColor (t_id, k, row_color, RGB ( 0 , 255 , 0 ), RGB ( 0 , 0 , 0 ), RGB ( 255 , 255 , 255 ), RGB ( 0 , 0 , 0 )) --Crash here
end
sleep ( 500 )
end
end
добавьте строку так:
Код
function main()
is_run=true
row_color=15
t_id = AllocTable()
for i=0,15 do AddColumn (t_id,i, "", false, QTABLE_STRING_TYPE,8) end -- добавили
AddColumn(t_id, 0, "0", true, QTABLE_STRING_TYPE, 15)
Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
По хорошему, надо, чтобы разработчики терминала ответили на поставленные выше вопросы. Пока что кажется, что это баг терминала, раз не проверяются null при освобождении ресурсов в Вашем случае.
Mikhail написал: Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
вообще-то этот вылет уже был на форуме и я дал точно такое же решение. предполагаю причина банальна. Так как квик вылетает, то это не учтенная изначально разработчиками QLUA особенность VMLua. Но проявилась она на 9 версии, потому что в этой версии что-то радикально изменили.
Mikhail написал: Да понятное дело, что при наличии промежуточных колонок все работает. Я так и не понял баг это квика или моего скрипта или я в мануале что-то пропустил? Так мы привыкнем подгонять свои скрипты каждый раз под новые баги новых версий квиков. На то, чтобы выяснить причину вылета у меня ушло часа 4. А дальше что? "Доколе?"
я хотел бы Вам заметить, что делать так: for k=1,15 do SetColor(t_id, k, row_color, RGB(0,255,0), RGB(0,0,0), RGB(255,255,255), RGB(0,0,0))--Crash here end для таблице в которой Вы определили лишь 0 и 15 столбец не корректно. Предполагаю, что разработчики не учли слишком низкий уровень пользователей и не установили защиту от ... которой в природе не существует
Вы совершенно верно подметили. Защита от Дурака. (я любитель). Иногда за ненадобностю колонок я их просто удаляю в части их определения. И далее скрипт при проходе их просто опускает. Раньше, как говорится все работало. Теперь же конечно, написана новая функция, которая при запуске дает последовательные номера этим колонкам. Да, возможно что у меня отсутствует "культура кода". Но в данном случае всеже наверное баг квика.
Mikhail, Мы обнаружили ошибку в нашем ПО по вашему обращению и исправим её в одной из очередных версий ПО. Приносим извинения за причиненные неудобства.