Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизОшибка после закрытия программы!!! Найти похожие ветки
← →
grol © (2005-06-28 01:57) [0]Мастера Delphi помогите мне разобраться по такому вопросу:
Скомпилировал прогу, открываю ее, произвожу там расчеты, когда начинаю закрывать и после закрытия выдается вот такая ошибка: Заголовок - Application Error; содержание - Exception EAccessViolation in module Project1.exe at 00003584. Access violation at address 00403584 in module "Project1.exe". Read of address 7874633D. Сначала я думал, что это из-за того, что я использую динамические массивы. Но это не могло быть причиной (наверное), т.к. я их по закрытию программы финализирую (обнуляю). Короче я не знаю в чем дело. А главное заметил такую тему, когда в процедуре FormClose ставлю точку останова для пошаговой отладки (В FormClose кстати как раз и происходит обнуление всех массивов), то по исполнению пошаговой отладки этой процедуры после закрытия программы ошибка не возникает. Мастера подскажите пожалуйста в чем же может быть дело или скажите, как найти эту ошибку исходя из сообщения. Заранее спасибо за ответы.
Я так уже задолбался!!!!!!! Помогите мне!!!!
← →
GanibalLector © (2005-06-28 02:08) [1]в 17 строке.Как обычно ;)
З.Ы.Код давай...
← →
iskatel © (2005-06-28 02:14) [2]ну проблема в том что обнуляешь)) на кой икс ты это делаешь, после завершения процесса все его ресурсы освобождаются )) и видать ты обнуляешь, используя компонент или чтото вроде, который сам был уже удален при "обнулении" ))
← →
Германн © (2005-06-28 02:14) [3]2 grol © (28.06.05 01:57)
А базы данных пользуешь?
← →
Просто Джо © (2005-06-28 02:18) [4]Телепаты вышли на связь ;-)
← →
Просто Джо © (2005-06-28 02:20) [5]Search/Find error... и вводишь адрес, по которому произошла ошибка. Потом вверх по стеку вызовов и - да поможет тебе Аллах! :-)
← →
grol © (2005-06-28 02:51) [6]iskatel дело в том, что процедуру FormClose Delphi проходит без проблем, а вот только по выходу из нее, когда все инстукции процедуры выполнены происходит ошибка. Т.е внутри этой процедуры возникали ошибки я б их сразу бы увидел!!!
← →
Просто Джо © (2005-06-28 02:54) [7]Делать все равно нечего, пиво пью и бездельничаю. Давай, что ли, свою прогу, помогу разобраться. ТОЛЬКО если там не используются сторонние компоненты.
← →
grol © (2005-06-28 02:55) [8]Еще раз!!! Кому не понятен мой вопрос!!! Ошибка возникает не в коде. Я это проверял при пошаговой отладке, а после того как все инструкции выполняться и после выхода из FormClose - возникает ошибка. Если б ошибка была в коде я бы не писал в форум, попытался разобраться сам!
← →
grol © (2005-06-28 02:59) [9]Просто Джо спасибо конечно, но там как раз и есть потусторонние компоненты!!! А если так, то нельзя как нибудь обнаружить от куда эта ошибка пришла, кто ее родитель и все такое!!!
← →
Просто Джо © (2005-06-28 02:59) [10]Ну, если ошибка не в коде, тогда - это инопланетяне, однозначно. Обратись в Галактический Союз, там примут меры. Удачи.
← →
Просто Джо © (2005-06-28 03:00) [11]
> А если так, то нельзя как нибудь обнаружить от куда эта
> ошибка пришла, кто ее родитель и все такое!!!
Пробовал хотя-бы [5]?
← →
grol © (2005-06-28 03:04) [12]Просто Джо а по какому адресу из моего примера необходимо искать что-то...?
← →
Просто Джо © (2005-06-28 03:10) [13]Exception EAccessViolation in module Project1.exe at 00003584
← →
evvcom © (2005-06-28 08:55) [14]00003584 больно подозрительный, более похож на правду 00403584 Адреса-то как похожи!
← →
-=XP=- © (2005-06-28 09:08) [15]Ошибка после закрытия программы!!!
Не кричите!
Ошибка происходит в момент закрытия программы.
По причине ошибочности каких-то инструкций, написанных Вами.
Однозначно - обращение к удаленному объекту. Значит, либо Вы умудрились обращаться к объекту после его автоматического удаления, либо удаляете объекты, к которым после этого происходит обращение (осуществляемое Вами, или унаследованным кодом VCL).
Что программа вообще делает? А то, на самом деле: "Раз-два-три-четыре-пять, начинаю телепать".
← →
novice_man © (2005-06-28 10:04) [16]grol © (28.06.05 1:57)
Может поможет: использовать программу MemProof.
Взять на сайте http://www.delphikingdom.com.
Мне часто помогало при похожих ситуациях, пока я не прекратил использовать сторонние компоненты (во всяком случае позволяет отсеять сомнения в корректности его работы) и не стал тщательней контролировать создание/уничтожение объектов.
← →
TUser © (2005-06-28 11:31) [17]> Ошибка возникает не в коде.
Тогда это орфографическая ошибка в комментариях. Проверь Вордом.
← →
Баг (2005-06-28 11:36) [18]> Ошибка возникает не в коде.
Может борланд в IDE багов насовал :о)
← →
GanibalLector © (2005-06-28 11:37) [19]2 TUser © (28.06.05 11:31) [17]
>Тогда это орфографическая ошибка в комментариях. Проверь Вордом.
А!!! Я плакалЪ ;))
← →
Игорь Шевченко © (2005-06-28 12:32) [20]Эта...ошибка происходит в секциях finalization. Типа breakpoint туда поставить.
← →
isasa © (2005-06-28 12:54) [21]Очень похоже на повторное освобождение ресурса одного из компонентов, выложенных на форму.
Вариант 1
Для формы - создатьdestructor Destroy;
поставить останов, и пошагово(F7), ручками ...
begin
inherited;
end;
Вариант 2 (военный)
В FormClose по очереди убирать освобождение ресурсов.
← →
grol © (2005-06-28 19:06) [22]Первый модуль:
procedure TGlobalForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
Timer3.Enabled:=False;
Timer4.Enabled:=False;
s:=0;ijtem:=0;it3:=0;temp:=0;x:=0;y:=0;x1:=0;
y1:=0; GlobalKursor:=0;it5:=0;it5s:=0;m:=0;
GlobalMass:="";
Lab:=nil;imag:=nil;grid:=nil;ed:=nil;
all.R:="";
all.A1:=nil;all.A2:=nil;all.B1:=nil;all.B2:=nil;
all.E:=nil;
all.w:="";all.hm:="";all.hb:="";
all.f:="";
all.Uvi:="";all.Uosh:="";all.tmax:="";all.Up:="";
all.Uop:="";all.Eo:="";all.Em:="";all.Y:="";
Sleep(2000);
end;
Второй модуль:
procedure TReportForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
a_:=0;
Customer:=nil;
ChartName:="";
Ex:="";
PatBlt(Report1.Canvas.Handle, 0, 0, Report1.ClientWidth, Report1.ClientHeight, WHITENESS);
WordMemo.Clear;
CodeMemo.Clear;
end;
Первый модуль как раз и заканчивает работу программы!!! Помимо этого я использую такие компоненты:
Stringgrid;ListListBox;Memo;Edit;Image;Много Timer"ov;
WebBrowser;ChChart;еще что-то!!!
Мастера извините конечно за то, что может я еще не опытный в таких делах, но дело в том, что, когда я работаю с программой без breakpoint, то в после закрытия возникает ошибка. А если же я breakpoint поставлю и пошагово исполняю инструкции программы. И даже ставлю breakpoint в FormClose, то по закрытию программы ошибки не возникает. Вот такая фигня!!!
← →
Просто Джо © (2005-06-28 19:08) [23]8-()
Мама родная! А зачем вот это все???
> s:=0;ijtem:=0;it3:=0;temp:=0;x:=0;y:=0;x1:=0;
> y1:=0; GlobalKursor:=0;it5:=0;it5s:=0;m:=0;
> GlobalMass:="";
> Lab:=nil;imag:=nil;grid:=nil;ed:=nil;
> all.R:="";
> all.A1:=nil;all.A2:=nil;all.B1:=nil;all.B2:=nil;
> all.E:=nil;
> all.w:="";all.hm:="";all.hb:="";
> all.f:="";
> all.Uvi:="";all.Uosh:="";all.tmax:="";all.Up:="";
> all.Uop:="";all.Eo:="";all.Em:="";all.Y:="";
← →
Просто Джо © (2005-06-28 19:12) [24]Судя по обилию и стилю именования глобальных переменных тут может быть все, что угодно. :( Это нельзя отлаживать. Это нужно выбросить и переписать заново.
← →
Просто Джо © (2005-06-28 19:14) [25]Хм...
Lab:=nil;imag:=nil;grid:=nil;ed:=nil;
Это, соответственно: экземпляры TLabel, TImage, TStringGrid и TEdit? Их не нужно уничтожать ручками, тем более, обнулять ссылку на них! Это делает сама форма при уничтожении. Вот и получаешь ошибку.
← →
grol © (2005-06-28 19:30) [26]Так все-таки как же можно отследить кто родитель этой ошибки, уважаемые мастера?
← →
Просто Джо © (2005-06-28 19:35) [27]
> [26] grol © (28.06.05 19:30)
> Так все-таки как же можно отследить кто родитель этой ошибки,
> уважаемые мастера?
[25]
← →
grol © (2005-06-28 21:07) [28]Lab,imag,grid,ed:TComponent; такого типа...
← →
Плохиш © (2005-06-28 21:40) [29]
> PatBlt(Report1.Canvas.Handle, 0, 0, Report1.ClientWidth,
> Report1.ClientHeight, WHITENESS);
Мне не интересно что ты в конце хочешь сделать, но всё подчёркнутое в помойку и никогда больше так не делай.
← →
evvcom © (2005-06-28 21:44) [30]
> Мама родная! А зачем вот это все???
Эт, чтоб никто не догадался! (с) "Операция "Ы" и другие приключения Шурика" :)
← →
Просто Джо © (2005-06-28 22:42) [31]Блин, уже просто сил нет. Убери все из procedure TGlobalForm.FormClose к чертовой матери. Ты ведь вменяем, в конце концов?
← →
Просто Джо © (2005-06-28 22:44) [32]А если у тебя компоненты Lab,imag,grid,ed (и прочие) создаются динамически и Parent"а у них нет, то, ради Бога, сделай им XXX.Free, а не := nil.
← →
Гарри Поттер © (2005-06-28 23:50) [33]поставь открывающую фигурную скобку в TGlobalForm.FormClose после begin, а закрывающую перед end;
← →
Просто Джо © (2005-06-28 23:53) [34]
> [33] Гарри Поттер © (28.06.05 23:50)
> поставь открывающую фигурную скобку в TGlobalForm.FormClose
> после begin, а закрывающую перед end;
Шаман :)) Лучше уж тогда в DPR между begin...end.
← →
Anatoly Podgoretsky © (2005-06-29 00:00) [35]Просто Джо © (28.06.05 19:12) [24]
Жвлко такое выбрасывать.
← →
Гаврила © (2005-06-29 00:19) [36]Либо ошибка в финализации, либо используются глючные "потусторонние" компоненты.
Кстати попробуй форму отчета (а также все остальные кроме главной. если есть) разрушить руками (не закрывая главную форму) и посмотри, будет Access violation или нет
← →
Просто Джо © (2005-06-29 00:27) [37]
> [35] Anatoly Podgoretsky © (29.06.05 00:00)
> Просто Джо © (28.06.05 19:12) [24]
> Жвлко такое выбрасывать.
На доску почета однозначно 8-|
← →
grol © (2005-06-30 00:47) [38]Мастера помогите я уже скомпоновал исходники с компонентами! Если что скажите куда отсылать, только если Вы эого уже хотите!
Помогите мне пожалуйста, а, то я уже в отчаянном состоянии!
← →
Плохиш © (2005-06-30 00:49) [39]
> grol © (30.06.05 00:47) [38]
>только если Вы эого уже хотите
Мы что, похожи на мазохистов?
← →
grol © (2005-06-30 01:12) [40]Я ничего плохого не имел ввиду. Я только прошу помочь мне с прогой, так как я уже не знаю как исправить эту ошибку! Поэтому и начал заговариваться.
← →
Andy BitOff © (2005-06-30 01:27) [41]grol © (30.06.05 01:12) [40]
Бедненький ;) Ну выложи свои сырцы куда-нибудь.
← →
grol © (2005-06-30 01:46) [42]А куда? Я не знаю! Подскажите!
← →
Andy BitOff © (2005-06-30 01:47) [43]webfile.ru
← →
grol © (2005-06-30 01:52) [44]Спасибо!
← →
Германн © (2005-06-30 02:01) [45]2 grol
А это тебе действительно нужно?
Эта ошибка что-то портит?
У меня тоже есть нечто подобное. Программа при закрытии выдает сообщение об AV, но это сообщение закрывается так быстро, что и не разглядишь, что там написано. Я это отнес на "кривость Paradox и BDE, на которые, имхо, Борланд давно "положила" и не пытаюсь искать. :(
Правда у меня такое происходит "иногда".
Ну да, что-то уничтожается до того как выполнились некие действия с ним. Типа в ОС уже вернули область памяти, которая содержала некий указатель на что-то, а BDE пытается что-то выполнить над теми данными, на которые он указывал.
Но это у меня. Тем более, что моя программа предусматривает выход из нее как "нештатную ситуацию".
← →
kami © (2005-06-30 02:05) [46]А у меня такая ситуация возникала (правда, и при трассировке тоже), когда вызывал какую-то API ф-ю, не зарезервировав память под возвращаемый параметр :)
Причем, результат возвращался правильный, ошибок GetLastError не выявлял, но при завершении программы - AV :))
← →
grol © (2005-06-30 02:06) [47]Мастера вот ссылка на файл - http://www.webfile.ru/381047 и Пароль 123456789
Спасите от погибели неопытного программиста, дайте ему шанс на выживание
← →
Плохиш © (2005-06-30 02:15) [48]300 byte/sec 8-O
← →
Плохиш © (2005-06-30 02:16) [49]
> Германн © (30.06.05 02:01) [45]
> Я это отнес на "кривость Paradox и BDE,
Не, во всех грехах Билл Гейтс виноват, а не мы родимые.
← →
Просто Джо © (2005-06-30 02:16) [50]
> [48] Плохиш © (30.06.05 02:15)
> 300 byte/sec 8-O
А ты хотел? Все же кинулись туда помогать неопытному программисту! :0)
← →
Плохиш © (2005-06-30 02:19) [51]А, так помошников немеряно, ну тоды я спать пошёл ;-)
← →
Просто Джо © (2005-06-30 02:21) [52]
> [51] Плохиш © (30.06.05 02:19)
> А, так помошников немеряно, ну тоды я спать пошёл ;-)
Спи спокойно, дорогой товарищ! Гролу поможет партия.
%)
← →
Плохиш © (2005-06-30 02:34) [53]Тияк, начнём:
1. TGlobalForm.FormClose
Строки:
ReportForm.Chart1.Free;
ReportForm.Series1.Free;
убрать нафик, не ты создавал - не тебе и удалять, к тому же форма ReportForm к этому моменту скорее всего уже будет уничтожена.
2. GrOfFunc сделать методом формы TReportForm и убрать из неё все упоминания ReportForm.
3. ... пока хватит :-)
← →
Германн © (2005-06-30 03:13) [54]2 Плохиш © (30.06.05 02:16) [49]
>> Германн © (30.06.05 02:01) [45]
>> Я это отнес на "кривость Paradox и BDE,
>Не, во всех грехах Билл Гейтс виноват, а не мы родимые.
А я разве упрекал Билла в чем-нибудь?
И как Билл относится к Paradox и к BDE?
← →
Anatoly Podgoretsky © (2005-06-30 09:03) [55]Германн © (30.06.05 03:13) [54]
Хорошо относится.
← →
Плохиш © (2005-06-30 09:08) [56]
> Германн © (30.06.05 03:13) [54]
Ну да, ну да, ты нашёл новых виноватых.
← →
Сайбель Алексей © (2005-06-30 10:58) [57]В общем:
1. Помимо компонентов, которые в архиве,
еще куча модулей: {SkinData,}{DynamicSkinForm,}{spTrayIcon,} {SkinCtrls,}{SkinBoxCtrls,}{SkinMenus,}{SkinHint,}{spColorCtrls,}{SkinGrids,}
2. Плохо даны именна переменных и форматирование кода оставляет желать лучшего.
3. Все таки warning не зря придумали, и желательно от них "избавляться". У тебя их 13 штук.
4. Аккуратнее использовать стороннии компоненты..
Вывод поиск ошибки - нереальное занятие в твоей программе.
← →
Сайбель Алексей © (2005-06-30 11:10) [58]Откомпилировал пошагово =|
не делайте этого..
← →
Плохиш © (2005-06-30 11:22) [59]
> Сайбель Алексей © (30.06.05 11:10) [58]
:-)) Вот человеку делать нечего - старался, компилировал :-) После того как он исправит ляпы, видные невооружённым глазом без компиляции, будем говорить дальше.
← →
msguns © (2005-06-30 11:30) [60]Ужастик однако ;))
← →
grol © (2005-06-30 21:17) [61]Значит конкретного ответа не будет в чем дело! :-((( Ну ладно попытаюсь сделать сам что-нибудь!
← →
Просто Джо © (2005-06-30 21:18) [62]
> Ну ладно попытаюсь сделать сам что-нибудь!
Хм... а до этого момента не пробовал?
← →
grol © (2005-06-30 21:19) [63]Нет! Я уже как раз все перепробовал, что мог. Мой уровень не позволяет найти причину этой ошибки! :-((((
← →
Просто Джо © (2005-06-30 21:30) [64]А многочисленными советами, данными в этой ветке, уже воспользовался?
← →
Плохиш © (2005-06-30 23:41) [65]
> grol © (30.06.05 21:17) [61]
> Значит конкретного ответа не будет в чем дело! :-(((
Так ты хотел, чтобы за тебя твою программу отладили? Так бы сразу и говорил, тогда озвучь сумму, может кто-нибуть и согласится.
← →
grol © (2005-07-01 02:09) [66]Ну это же форум программистов! Я так понимаю, что тут мастера должны помогать другим. Кто еще не ас в Delphi. И так же буду делать, когда буду знать на уровне хорошего программера. Тогда спасибо всем, кто мне хоть как-то пытался помочь в решении проблемы. Дальше буду думать сам, если я смогу еще что-то придумать!
← →
Erik1 © (2005-07-01 10:37) [67]Возми готовый исходник и посмотри как правильно писать надо! Для начала избався от глобальных переменых и нетрогай компонеты раз все равно ничего в этом непонимаеш.
← →
msguns © (2005-07-01 11:06) [68]>grol © (01.07.05 02:09) [66]
>Я так понимаю, что тут мастера должны помогать другим.
Ошибка первая. Должен только тот, кто брал взаймы.
Ошибка вторая. Не надо пытаться делать то, чего можно не делать.
Не имея понятия в основах, лезем удалять объекты, о происхождении которых не имеем представления.
Ошибка третья. Не пытаемся читать книги по Дельфи с примерами, не смотрим многочисленные примеры кода, представленные с самой делфой, игнорируем великолепный встроенный хэлп.
Ошибка четвертая. Когда знающие люди пытаются объяснить ошибочность самого подхода к работе, нервничаем и сердимся вместо того, чтобы просто задуматься в стиле "А не дурак ли я ?"
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.039 c