![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я где-то неделю не открывал один свой проект и сейчас, откомпилив его, мне стало выдавать Access Violetion при его закрытии((((
При обработке сообщения WM_MOVING второе окно вообще стало исчезать: procedure TForm1.Moving(var Msg:TMessage); begin Form2.Left:=Form1.Left-Form2.Width-10; Form2.Top:=Form1.Top+WndCaptionHeight; end; Вроде все предельно просто, но второго окна нет( При начале перетаскивания окна оно исчезает. Я попробовал создать заново exe-шник, но при удалении старого пишет, что он не найден. Можно ли как нить его полностью создать заново? Я подменил текущий exe-файл другим(та же самая прога, но он у меня был сохранен в отдельной папке) и у меня исчезла Access Violetion и второе окно стало перемещаться вместе с основной формой, но при закрытии приложения Дельфи открывает CPU с ошибкой: Project ... raised too many consecutive exceptions:'access violetion at 0x00403192: read of addres 0x00a12620' И показывает сюда: 00403192 8B08 mov,ecx,[eax] Подскажите, пожалста, в чем может быть дело и что мне желательно сделать? Для меня это очень важно! Заранее спасибо. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Стереть все файлы DCU, DSK. Затем открыть проект и выполнить "Build All"
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Непомоголо( Все равно выдает Access Violetion. |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
попробуй
if Form2 <> nil и еще попробуй SetWindowPos -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Ошибка Access Violetion возникает при закрытии формы и Дельфи открывает CPU. Причем это видимо связано с освобождением ресурсов, поскольку блок в CPU начинатся так
TObject.Free ...... ...... ...... ...... 00403192 8B08 mov,ecx,[eax] //сдесь останавливается курсор ...... ...... |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Такие ошибки очень трудны в отладке, лучше принести код или прислать кому-то знающему, у меня так было когда в одном из виртуальных деструкторов не было указание на родительский деструктор, а экземпляры класса несколько раз создавались и разрушались. Простой трассировкой ошибки ты ничего не найдёшь. Обычная причина - неправильное распределение памяти где-то в коде, неправильное освобождение памяти, неправильное разрушение объектов, выход за пределы массива, неправильные вызовы DLL и т.п. Совет будет такой - скопируй проект, и начинай удалять из него формы, компоненты, процедуры - по маленьку, и проверяй, как исчезнет ошибка - значит глюк в соответственном куске кода.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Все это правильно, но вся странность в том, что у меня все прекрасно работало и я ни чего не изменял, как вдруг начало глючить((((( Буду пробовать искать.
|
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Это как раз не странно - смотри, неправильно вызывается деструктор, далее есть вероятность того что в памяти которая числится как освобождённая, но на самом деле содержит нужную инфу, создаётся другой объект. Теперь при обращении к памяти возможен вариант что там содержится вовсе не то что ожидалось. Процесс размещения объектов в памяти динамический, так что всегда есть вероятность, что всё проскочит нормально - просто "неправильная" память не будет повторно использована, и внешне всё будет нормально, но вот ты добавил одну совершенно не значащую строку в программу, абсолютно безопастную типа "a:=3", и размещение объектов немного "сдвинулось" и теперь неправильные манипуляции с памятью "затирают" что-то нужное.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Спасибо большое! Я нашел ошибку, только вот не совсем ее понял:
Раньше я делал так - загружал данные о настройке приложения из файла(через некоторое время начала появляться ошибка). Сейчас я достаю их из реестра: LoadParam:array[1..5] of string[15]; try Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; if not Reg.OpenKey('SOFTWARE\MySoft\MyProgram',False) then begin Reg.CreateKey('SOFTWARE\MySoft\MyProgram'); SetRegDefaultValues(Reg); end; try Val:=TStringList.Create; Reg.GetValueNames(Val); for i:=0 to Val.Count-1 do LoadParam[i+1]:=Reg.ReadString(Val.Strings[i]); finally Val.Free; end; finally Reg.Free; end; При загрузке данных первый элемент массива получает IP-адрес(в string-овом типе) и он, вроде, загружается нормально(я проверил, подставив ShowMessage(LoadParam[1]) на этапе загрузки значений), но после появления формы(визуально) значение меняется на какие-то иероглифы и если обратиться к ShowMessage то на экране появляется сообщение длинной, превышающей размер длины экрана, и заполненное пустыми символами. Из за чего ето может быть? |
|||
|
||||
=Vit= |
|
|||
Unregistered |
Где стоит объявление "LoadParam:array[1..5] of string[15];"?
|
|||
|
||||
Spawn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Это глобальная переменая в отдельном юните.
|
|||
|
||||
SkyDaemon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2002 Где: Chicago Репутация: нет Всего: нет |
Попробуй объявить её как поле какой-нибудь формы
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |