![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
TheAviator |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 28.9.2003 Где: Николаев-Киев Репутация: нет Всего: нет |
Выскакивает тут (иногда, не на каждом цикле):
Причину установить не могу, но не влияет на работу проги. Проверял с ним разобраться таким образом:
Но почему-то все равно его выводит... Хотя по задумке должно ловить ошибку и ничего не предпринимать в этом случае... |
||||
|
|||||
Tamerlann |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: нет Всего: 2 |
1). Раз всё равно выводит ошибку, значит ошибка не там
2). Напиши поподробнее плиз, что за abtQuest, sQuest, их размеры и тип. P.S. я бы что-нибудь написал в except, хоть showmessage, тогда точно увидишь, отлавливает он её или нет, а так не понятно, может он и отловил, но выполнять-то нечего в except'e. --------------------
http://timursdev.blogspot.com/ |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
TheAviator, если ошибка там, но окно вываливается, то:
а) Tools->Debugger Options->Language Exceptions->Stop on Delphi Excpetions - вот эту галочку отключи б) запусти программу не из Delphi -------------------- С уважением, г-н Посол. |
|||
|
||||
TheAviator |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 28.9.2003 Где: Николаев-Киев Репутация: нет Всего: нет |
- Я запускал в режиме отладки. Вываливается на этой строке.
- Не из Дельфи тоже вываливается! А тот вариант что ты предложил это только для режима отладки? |
||||
|
|||||
TheAviator |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 28.9.2003 Где: Николаев-Киев Репутация: нет Всего: нет |
Данные принимаютя от компонента Com-порта, он возращает указатель на данные и их размер. Я загоняю необходимые мне байты в строку, а потом преобразовываю их в массив. Таким образом получаю обмен двоичными данными (не ASCCII). Компонетов в проге два, в разных DataModul-ях.
Кусочек кода с определением переменных и заголовком процедыры ниже.
Это сообщение отредактировал(а) TheAviator - 7.2.2004, 15:19 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Попробуй так:
А ошибка была у тебя в строке с move: вместо PChar(sQuest)^ надо sQuest[1] -------------------- С уважением, г-н Посол. |
|||
|
||||
TheAviator |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 28.9.2003 Где: Николаев-Киев Репутация: нет Всего: нет |
Опа. Кажется, я понял, почему почему вылетало Access Violation.
По задумке действительно, не должно было приходить пакетов длинней 20 байт. Но иногда приходили длинные (ошибочные, или склееные пакеты), большей длины. Строка подгоняла свой размер под размер пакета, а массив так и оставался длинной до 20. В том самом операторе происходило обращение к несуществуюущему элементу массива, на что и выдавалось Access Violation. Исправляется так :
|
|||
|
||||
TheAviator |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 28.9.2003 Где: Николаев-Киев Репутация: нет Всего: нет |
Кстати, так на вопрос топика и не ответили:
|
|||
|
||||
December |
|
||||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: 8 Всего: 57 |
Posol ответил. Это у тебя что-то напутано. |
||||
|
|||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
если в Delphi, то как сказал Посол, иначе try с пустым except. Если же не поможет, тогда что-то делаете неправильно.
-------------------- |
|||
|
||||
Makanaki |
|
|||
Unregistered |
А есть ли возможность убрать остановки только по эксепшинам, захваченым в try..except..end?
|
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Если надо убрать остановку на исключениях, возникающих в try..except, то:
Или что-то другое надо ? -------------------- С уважением, г-н Посол. |
|||
|
||||
Pathfider |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 13.7.2004 Где: все там же Репутация: -1 Всего: 1 |
А я думаю, что нужно прелопатить весь код проги и посмотреть, моежет усть какие-то незакрытые хендлы (файлы, прцессы, потоки ...). В обшем ка было уже сказано выясни на какой строке вылетает ошибка, а потом посмотри код который как либо связан с использованными переменными. Иногда даже помогает перенести старый код на новый проект.
--------------------
Trust is a weakness |
|||
|
||||
Vit |
|
||||||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
1) Access Violation - это однозначно критическая ситуация которую надо исправлять не путём отлова её, а путём исправления кода и недопущения. Это очень серьёзная ошибка, её игнорирование может привести к очень малопонятным и труднообъяснимым изменениям в поведении программы. Поэтому в каждом конкретном случае попытаться надо отловить ошибку и устранить причину а не следствие.
2) Отлов именно Access Violation:
Этот код даст сообщение если Access Violation и оставит ошибку неотловленной если она другой природы Добавлено @ 22:18
Это не всегда так, зависит что именно с памятью происходит. Например если отключить проверку массивов то следующий код может на ура пройти:
Но изменённые хрен-знает-где байты могут затереть чего-то относящиеся к соверженно другому и внезапно при каком-то стечении обстоятельств вдруг строка кода типа:
вдруг выдаст Access Violation! Эти ошибки "плавающие" - они могут появлятся или нет в зависимости от погоды, причём выскакивать в самых разных и странных местах. Поэтому такой код который вы написали следует очень-очень внимательно проверять, особенно если возникает AV -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |