On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение



Пост N: 67
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 04.07.12 16:43. Заголовок: внутренняя ошибка 5333


стало рвать прогу с такой ошибкой на строке с такой командой
aShow := asort( aShow,,, {|x,y| (dtos(x[2])+x[1]) < (dtos(y[2])+y[1]) } )

причём только на 2-3 покупателях (и несколько раз пропустило нормально)
при отладке всегда проходит без ошибок
размер массива 2-3 сотни записей(каждая - 8ми елементные массив)

здесь на форуме нашел только такое упоминание
5333 Misuse of VM System
т.е. как бы я неправильно употребляю виртуальную машину

мож кто вспомнит/предложит?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 17 [только новые]





Пост N: 543
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 04.07.12 17:07. Заголовок: asort возвращает ссы..


asort возвращает ссылку на массив

вот пример с ng

aArray := { 3, 5, 1, 2, 4 }
ASORT(aArray)
// Result: { 1, 2, 3, 4, 5 }

ASORT(aArray,,, { |x, y| x > y })
// Result: { 5, 4, 3, 2, 1 }

пробуй просто
asort( aShow,,, {|x,y| (dtos(x[2])+x[1]) < (dtos(y[2])+y[1]) } )

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 68
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 06.07.12 11:39. Заголовок: ненене все покупател..


ненене
все покупатели в цикле проходят через эту команду и токмо 2-3 рвут прогу с сабжем
у них единственное отличие -- размер сортируемого массива больше чем у других на ~200-300 элементов
но сам массив не превышает и 500 элементов шо вроде вписывается в ограничения клиппера
да и при отладке задачу не рвет ни на ком
так шо похоже на проблему с выделением памяти

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2439
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.07.12 13:10. Заголовок: Вспоминаются войны к..


Вспоминаются войны клиппера с оперативкой. Если побеждает оперативка - то клиппер капитулирует как раз с ошибкой 5333.
Клипперу надо помочь, подкинуть боеприпасов.
Клиппер должен быть со всеми патчами, 5.2e или 5.3b, программа собрана блинкером 6 или 7, для работы в protected режиме, т.е. с командой bli exe ext. Там еще какие-то параметры есть. Имеет значение и набор библиотек.
Лучше расскажите, а еще лучше покажите, чем и как вы собираете эту программу, под какой ОС она выполняется, тогда легче будет что-то подсказать.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 784
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 06.07.12 13:14. Заголовок: СевДон пишет: 5333 ..


СевДон пишет:

 цитата:
5333 Misuse of VM System
т.е. как бы я неправильно употребляю виртуальную машину


Не ты, а она злоупотребляет.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 549
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 06.07.12 13:38. Заголовок: Паша правильно сказа..


Паша правильно сказал - нужно больше информации.
Вот еще з гугла:

5.5 What is "Internal Error 5333" and what can I do about it?

(Answer supplied by Samuel S. Shuster on 17 July 1993.)

Internal Error 5333 occurs when the virtual memory management subsystem gets overloaded and cannot find enough memory to continue execution. You can take a few steps to cope with IE 5333:

You can force the virtual memory manager to do a partial cleanup and compaction by executing

@ 100, 100 SAY "" // This is an impossible screen location.

Consider using CA-Clipper 5.2d. It contains bug fixes that sometimes but not always solve IE 5333 problems. (Editor's note: Obviously, Shuster wrote this when 5.2d was the current release. The consensus now is that 5.2e is the most stable CA-Clipper release.)


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 273
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 06.07.12 14:03. Заголовок: Измените условие сор..


Измените условие сортировки. Не сравнивайте даты как строки, а сравнивайте их именно как даты. Проблема связана с тем, что постоянно формируются временные строки в критерии сравнения.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2440
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.07.12 14:20. Заголовок: Сыроежка пишет: Изм..


Сыроежка пишет:

 цитата:
Измените условие сортировки. Не сравнивайте даты как строки, а сравнивайте их именно как даты. Проблема связана с тем, что постоянно формируются временные строки в критерии сравнения.



Кстати, да. Если расширить и углубить это предложение, то можно сделать так:

asort( aShow,,, {|x,y| if(x[2]==y[2], x[1]<y[1], x[2]<y[2]) } )

У меня есть подобная функция для сортировки массива:

Function ASortA(a, n, n2)
// -------------------------------------------------------------
// Сортирует двухмерный массив по индексу n
// Если задан n2 - сортировка по двум индексам
// -------------------------------------------------------------
Return ASort(a,,, if(n2 == nil,;
{|x1, x2| x1[n] < x2[n]},;
{|x1, x2| if(x1[n]=x2[n], x1[n2]<x2[n2], x1[n]<x2[n])} ))

Но она работает медленновато на больших массивах, и для харбора я ее переписал на С

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 274
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 06.07.12 14:21. Заголовок: Я сейчас перепишу ва..


Я сейчас перепишу ваше условие, правда, коряво, так как уже не помню синтаксис Clipper

{ |x, y| x[2] < y[2] .OR. !( y[2] < x[2] ) .AND. x[1] < y[1] }


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2434
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.12 15:29. Заголовок: Сыроежка пишет: Не ..


Сыроежка пишет:

 цитата:
Не сравнивайте даты как строки, а сравнивайте их именно как даты


+1

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 69
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 06.07.12 16:51. Заголовок: Pasha пишет: Retur..



Pasha пишет:

 цитата:
Return ASort(a,,, if(n2 == nil,;
{|x1, x2| x1[n] < x2[n]},;
{|x1, x2| if(x1[n]=x2[n], x1[n2]<x2[n2], x1[n]<x2[n])} ))


по совету заменил на
aShow := asort( aShow,,, {|x,y| if( x[2]==y[2],x[1]<y[1], x[2]<y[2]) } )
из 10 попыток стало проходить правильно в 2-3 случаях вместо 1 как раньше
но уже прогресс ;)

прога пашет под ХР НОМЕ, сделана на клиппере 5.01, собрана ртлинком

ЗЫ и всё таки мой алгоритм короче и красивше хоть и ест больше памяти


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2435
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.12 16:56. Заголовок: СевДон Попробуй бли..


СевДон
Попробуй блинкером собрать в protected mode

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2436
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.12 17:25. Заголовок: СевДон пишет: ЗЫ и ..


СевДон пишет:

 цитата:
ЗЫ и всё таки мой алгоритм короче и красивше хоть и ест больше памяти


И не только памяти , и работает куда дольше.

Простой пример

 
ashow:={}
for i=1 to 2000
aadd(ashow ,date()+i)
next
t:=seconds()
aShow := asort( aShow,,,{|x,y| dtos(x) < dtos(y) } )
? seconds()-t // 16 секунд

ashow:={}
for i=1 to 2000
aadd(ashow ,date()+i)
next

t:=seconds()
aShow := asort( aShow,,,{|x,y| x < y } )
? seconds()-t // 4 cекунды




Результаты на Harbour ;)
0.03
0.00

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 275
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 06.07.12 18:11. Заголовок: А почему по-прежнему..


А почему по-прежнему оставляете присваивание, если исходный массив получает отсортированный вид?

aShow := asort( aShow,,, {|x,y| if( x[2]==y[2],x[1]<y[1], x[2]<y[2]) } )

Это затратная операция.

Вполне возможно, что ошибка нехватки памяти - это следствие более раннего неправильного использования массивов и строк. Может быть у вас есть private или public переменные?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 70
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 07.07.12 10:05. Заголовок: Dima пишет: Простой..


Dima пишет:

 цитата:
Простой пример


в задаче надо сравнивать не даты а спарку дата+номер_ТТН (если бы только даты я бы их и не преобразовывал бы,этож лишняя работа... )
посему ничего лучше не придумал как перевести все в строки и уже их сравнивать
Каков Ваш алгоритм для такой задачи? Паша предложил свой, он тож правильный (у него там 1 операция сравнения и 1 If, у меня 2 dtos + 2 сложения и 1 сравнение, шо быстрее гляну но попозже)

Сыроежка пишет:

 цитата:
А почему по-прежнему оставляете присваивание, если исходный массив получает отсортированный вид?


хз... так исторически сложилось так сортировать массивы стало уже инстинктом, прийдеся себя ломать
Решил воспользоваться Вашим советом -- результат впечаляет: ошибка вылетает уже 1 раз из 10! Спсб!
С private или public переменными аккуратен, здесь их нет

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2441
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.12 11:20. Заголовок: СевДон пишет: в зад..


СевДон пишет:

 цитата:
в задаче надо сравнивать не даты а спарку дата+номер_ТТН (если бы только даты я бы их и не преобразовывал бы,этож лишняя работа... )
посему ничего лучше не придумал как перевести все в строки и уже их сравнивать
Каков Ваш алгоритм для такой задачи? Паша предложил свой, он тож правильный (у него там 1 операция сравнения и 1 If, у меня 2 dtos + 2 сложения и 1 сравнение, шо быстрее гляну но попозже)



Сортировка DTOS(x[2])+x[1] - это вызов функции и конкатенация строк, которая связана с выделением памяти под результирующую строку, и это выделение делается 2 раза для каждой операции сравнения, а таких операций выполняется великое множество для сортировки большого массива
Выполнение
{ |x, y| x[2] < y[2] .OR. !( y[2] < x[2] ) .AND. x[1] < y[1] }
или
{|x,y| if( x[2]==y[2],x[1]<y[1], x[2]<y[2]) }
это обращение к элементу массива и операции сравнения, которые выделения памяти не требуют, а работают исключительно со стеком vm клиппера

И все таки, пересоберите свою программу блинкером. Это надо было сделать лет 15 назад. rtlink работает еще в режиме 8086, даже не использует режим 80286. С rtlink программа имеет доступ к примерно 400k памяти, столько ей даст от щедрот виртуальная машина dos. Если всего памяти порядка 1Gb, то это менее 0.05% доступной памяти. Согласитесь, калибр маловат, надо использовать больший. Блинкер в protected mode даст программе в несколько раз больше памяти. Это все равно будет очень мало, менее 1% доступной памяти, но все-таки это лучше. Да и переделок программы при этом не требуется никаких, просто собрать ее другим линкером
Вот почему лучше использовать харбор. Он позволит использовать все 100% памяти.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 276
Зарегистрирован: 11.10.11
ссылка на сообщение  Отправлено: 07.07.12 15:32. Заголовок: Проверьте также, под..


Проверьте также, подключили ли вы EMM для вашей досовской сессии.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 71
Зарегистрирован: 25.02.10
ссылка на сообщение  Отправлено: 09.07.12 14:35. Заголовок: сенкс пободаюсь с бл..


сенкс
пободаюсь с блинкером
хотя это уже мож и не надо -- к нам приходит великая и ужасная 1С
вот так живешь и не знаешь шо с 1го августа жизнь меняется
хотя начало июля ничего не предвещало...

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 30
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет