![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка после закрытия программы!!! [D7, WinXP]
grol © (2005-06-28 01:57:00)Мастера 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 кстати как раз и происходит обнуление всех массивов), то по исполнению пошаговой отладки этой процедуры после закрытия программы ошибка не возникает. Мастера подскажите пожалуйста в чем же может быть дело или скажите, как найти эту ошибку исходя из сообщения. Заранее спасибо за ответы.
Я так уже задолбался!!!!!!! Помогите мне!!!!
grol (2005-06-28 21:07:00) [41]Lab,imag,grid,ed:TComponent; такого типа...
Просто Джо (2005-06-28 19:35:00) [42]
> [26] grol © (28.06.05 19:30)
> Так все-таки как же можно отследить кто родитель этой ошибки,
> уважаемые мастера?
[25]
grol (2005-06-28 19:30:00) [43]Так все-таки как же можно отследить кто родитель этой ошибки, уважаемые мастера?
Просто Джо (2005-06-28 19:14:00) [44]Хм...
Lab:=nil;imag:=nil;grid:=nil;ed:=nil;
Это, соответственно: экземпляры TLabel, TImage, TStringGrid и TEdit? Их не нужно уничтожать ручками, тем более, обнулять ссылку на них! Это делает сама форма при уничтожении. Вот и получаешь ошибку.
Просто Джо (2005-06-28 19:12:00) [45]Судя по обилию и стилю именования глобальных переменных тут может быть все, что угодно. :( Это нельзяотлаживать. Это нужно выброситьи переписать заново.
Просто Джо (2005-06-28 19:08:00) [46]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:='';
grol (2005-06-28 19:06:00) [47]Первый модуль:
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, то по закрытию программы ошибки не возникает. Вот такая фигня!!!
isasa (2005-06-28 12:54:00) [48]Очень похоже на повторное освобождение ресурса одного из компонентов, выложенных на форму.
Вариант 1
Для формы - создать
destructor Destroy;поставить останов, и пошагово(F7), ручками ...
begin
inherited;
end;
Вариант 2 (военный)
В FormClose по очереди убирать освобождение ресурсов.
Игорь Шевченко (2005-06-28 12:32:00) [49]Эта...ошибка происходит в секциях finalization. Типа breakpoint туда поставить.
GanibalLector (2005-06-28 11:37:00) [50]2 TUser © (28.06.05 11:31) [17]
>Тогда это орфографическая ошибка в комментариях. Проверь Вордом.
А!!! Я плакалЪ ;))
Баг (2005-06-28 11:36:00) [51]> Ошибка возникает не в коде.
Может борланд в IDE багов насовал :о)
TUser (2005-06-28 11:31:00) [52]> Ошибка возникает не в коде.
Тогда это орфографическая ошибка в комментариях. Проверь Вордом.
novice_man (2005-06-28 10:04:00) [53]grol © (28.06.05 1:57)
Может поможет: использовать программу MemProof.
Взять на сайте http://www.delphikingdom.com.
Мне часто помогало при похожих ситуациях, пока я не прекратил использовать сторонние компоненты (во всяком случае позволяет отсеять сомнения в корректности его работы) и не стал тщательней контролировать создание/уничтожениеобъектов.
-=XP=- (2005-06-28 09:08:00) [54]Ошибка после закрытия программы!!!
Не кричите!
Ошибка происходит в моментзакрытия программы.
По причине ошибочности каких-то инструкций, написанных Вами.
Однозначно - обращение к удаленному объекту. Значит, либо Вы умудрились обращаться к объекту после его автоматического удаления, либо удаляете объекты, к которым после этого происходит обращение (осуществляемое Вами, или унаследованным кодом VCL).
Что программа вообще делает? А то, на самом деле: "Раз-два-три-четыре-пять, начинаю телепать".
evvcom (2005-06-28 08:55:00) [55]00003584больно подозрительный, более похож на правду 00403584Адреса-то как похожи!
Просто Джо (2005-06-28 03:10:00) [56]Exception EAccessViolation in module Project1.exe at 00003584
grol (2005-06-28 03:04:00) [57]Просто Джо а по какому адресу из моего примера необходимо искать что-то...?
Просто Джо (2005-06-28 03:00:00) [58]
> А если так, то нельзя как нибудь обнаружить от куда эта
> ошибка пришла, кто ее родитель и все такое!!!
Пробовал хотя-бы [5]?
Просто Джо (2005-06-28 02:59:00) [59]Ну, если ошибка не в коде, тогда - это инопланетяне, однозначно. Обратись в Галактический Союз, там примут меры. Удачи.
grol (2005-06-28 02:59:00) [60]Просто Джо спасибо конечно, но там как раз и есть потусторонние компоненты!!! А если так, то нельзя как нибудь обнаружить от куда эта ошибка пришла, кто ее родитель и все такое!!!