Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Помогите выловить Access Violation!


Автор: allx 19.10.2005, 08:54
Утилитка маалюсенькая. Кода на 10кб. Три формы.
Ошибка происходит при уничтожении главной формы (по времени- после form.onclose). Пишет вмегда Access Violation at Adress 41FE. Что плохо - ошибка то происходит, то нет smile. Если с формой не работать - а закрыть сразу - все нормально... Ясен пень что гдето я намудрил. Но как понять - где? События OnClose, OnDestroy не обрабатываю...

Вобщем не знаю как отладить - нажимаю на паузу при открытом сообщении об ошибки - а там в call stack`e уже диспатчеры и дестроеры только висят, а в проекте уже пустота.

Все динамические массивы уже заменил статическими. Что делать - не знаю smile(

Автор: z-END 19.10.2005, 09:02
контролы какие нибудь "левые" используешь?
если да замени их все на стандартные, или по одному удаляй, пока не пропадет ошибка

Автор: allx 19.10.2005, 09:33
z-END
использую smile один, собственного приготовления, VCL но не гуёвый.
Но его создаю и уничтожаю динамически, при запуске и остановке потока. Excrption`ы он не генерит вроде...

Автор: z-END 19.10.2005, 09:35
allx а ты попробуй без негоsmile

Автор: allx 19.10.2005, 09:52
z-END
Дык он у меня всю работу делает. Ка же я без него. К тому же написал его на базе уже отлаженной и проверенной проги. да и не может он...
Мне больше интересно, КТО же по адресу 000041FE хочет прочитать адрес FFFFFFF9? Это ж кто-то в самом заголовке проги...

Автор: z-END 19.10.2005, 09:57
а я тебе говорю 80% что проблема в нем..
ты его удали и проверь долго чтоли?

Автор: allx 19.10.2005, 10:02
z-END
Удалил с главной формы. остался он только в потоке. Проблема осталась.
ЗЫ. Я и сам понимаю что проблема в коде. только где и как искать? я хотел выяснить именно это!

Автор: z-END 19.10.2005, 10:17
allx если вопросы "после чего это случилось" не дают никакой информации то тут два варианта:
1. как я уже сказал поодному удалять контролы, комментриовать куски кода вплоть до голого проекта и каждый раз проверять появляется AV или нет.
2. создавать копию проекта и добавлять по одному контролы и код при этом проверяя есть AV или еще нет

Автор: Albinos_x 19.10.2005, 10:44
Цитата
его создаю и уничтожаю динамически

тоже думаю, что глюк где-то здесь. Проверь порядок уничтожения объекта... возможно есть попытка работы с ним после уничтожения...

Автор: Alex 19.10.2005, 15:54
http://forum.vingrad.ru/index.php?act=Help&CODE=01&HID=17

Автор: allx 19.10.2005, 19:04
Alex
Смешно smile) Не привел код сознательно. я лишь уважаю участников форума, думаю что никто за меня в юните на 30КБ ошибку искать не будет smile)
Я разобрался только что кстати. Вобщем проблема была в вызове API - функции, которая по указанному адресу записывала определенное кол-во данных. Вобщем я когда писал - "схитрил", вместо указателя на массив байт подсовывал ф-ии сразу указатель на переменную. вроде работало нормально smile здесь и происходила бага.

Автор: Alex 19.10.2005, 21:00
Цитата(allx @ 19.10.2005, 20:04)
Не привел код сознательно. я лишь уважаю участников форума, думаю что никто за меня в юните на 30КБ ошибку искать не будет

По больше бы таких думающих smile Ну уж если совсем крайний случай, то можно и помочь человеку, все мы ошибаемся, а когда человек старается найти, но не получается, то почему бы не помочь smile

Автор: allx 20.10.2005, 18:52
АН НЕТ!!!
проблема была в другом!

Вот скажите мне пожалуйста. В чем собсно проблема?
Есть статический массив чисел. Объявлен публичным в форме

intv: array[1..255] of integer;

заполняются в среднем 2-3 первых элемента. по много раз. (по 20-30 раз за операцию).
заполняется исключительно из потока. ессно путем synchrinize();

Автор: _hunter 20.10.2005, 19:13
если первых -- значит в 0-й элемент пишеш...

Автор: allx 20.10.2005, 19:53
_hunter
гыыы. пора мне покупать очки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)