Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Ошибка после закрытия программы!!!   Найти похожие ветки 

 
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;
begin
inherited;
end;
поставить останов, и пошагово(F7), ручками ...
Вариант 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;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.058 c
3-1118227169
jiny
2005-06-08 14:39
2005.07.18
Проблема с FormatFloat( #.## ,sum(expression))


8-1111194529
Tga
2005-03-19 04:08
2005.07.18
Что в tga отвечает за прозрачность ?


1-1119909466
Контр
2005-06-28 01:57
2005.07.18
Почему могут не срабатывать сообщеня OnMouseEnter и OnMouseLeave?


3-1118215288
Dimedrol
2005-06-08 11:21
2005.07.18
MSSQL running time?


9-1112248894
WondeRu
2005-03-31 10:01
2005.07.18
Нашел ресурс с исходниками игр