|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Access violation at address после добавления MainMenu на форму
Народ, помогите, пожалуйста. Несколько месяцев работаю над программой, как мало-мальски чего-нибудь исправлю - обзываю новой версией и запускаю на машине, которая постоянно работает. Там оно работает по нескольку дней - я бы заметил, если бы что-то подобное случалось раньше. До сей поры всё было в порядке, а тут решил я MainMenu добавить на форму - так стоит добавить в него хоть один элемент, как при закрытии программы выдаёт "Access violation at address 0047B4AD in module 'xxx.exe'. Read of address 00000000". Есть обработчик FormClose, пробовал его убрать - ситуация не меняется. Call Stack пишет следующее:
:7787b727 KERNELBASE.RaiseException + 0x58 :004064a0 NotifyNonDelphiException + $1C :77ed878b ; ntdll.dll :77e9010f ntdll.KiUserExceptionDispatcher + 0xf :0047b5a5 TControl.SetLeft + $19 :0047b12b TControl.Resize + $1B :0047d8cf TControl.WndProc + $2D7 :00482195 TWinControl.WndProc + $56D :004ced1d TCustomForm.WndProc + $599 :00481833 TWinControl.MainWndProc + $2F :0044dcb2 StdWndProc + $16 :77326238 ; C:\Windows\syswow64\USER32.dll :773268ea ; C:\Windows\syswow64\USER32.dll :77328428 ; C:\Windows\syswow64\USER32.dll :77326e4c ; C:\Windows\syswow64\USER32.dll :74930b64 ; C:\Windows\SysWOW64\uxtheme.dll :74930b96 ; C:\Windows\SysWOW64\uxtheme.dll :7732721c USER32.GetPropW + 0x53 :77326238 ; C:\Windows\syswow64\USER32.dll :773268ea ; C:\Windows\syswow64\USER32.dll :77330ab0 ; C:\Windows\syswow64\USER32.dll :77330ad6 USER32.CallWindowProcW + 0x1b :00482295 TWinControl.DefaultHandler + $DD Все проблемы исчезают, как только удалю MainMenu или очищу параметр Menu в свойствах формы. У меня 64-битная Win7, код пишу в 15-м Embarcadero RAD Studio XE. Чего ему надо? |
#2
|
||||
|
||||
У меня была похожая непонятная ошибка, когда после добавления меню начинались вылеты с Access Violation. Оказалось, что собака была зарыта в именах классов: форма у меня называлась MainMenu, соответственно, ее класс автоматически прописался как TMainMenu. А TMainMenu - это имя класса меню, и при освобождении памяти программа "терялась", "не понимая", кому какой класс принадлежит.
Я просто переименовал форму (и ее класс), проблема решилась... Ne timeas obscurum. |