|
|
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Не могу понять где собака порылась. Есть датамодуль (dmPub) в отдельном bpl. Есть два приложения в которых подключен данный bpl . В обоих приложениях при создании главной формы происходит следующее: Код: plaintext 1. 2. 3. 4. 5. В первом приложении при его закрытии и соответсвенно удалении dmPub все проходит нормально. Во втором получаю ошибку (причем никаких дополнительных действий не происходит, просто запуск приложения и тут же его закрываем, для чистоты эксперемента так сказать): Error 00001. 0x400004 (Thread 0x0E34): Exception 0xC0000005: Access violation at 0xEFEFF037. Call Tree: 0x7C901010(=ntdll.dll:0x01:000010) 0x004F51B3(=CrystalWaiter.exe:0x01:0F41B3) 0x004AA4D1(=CrystalWaiter.exe:0x01:0A94D1) 0x0050911C(=CrystalWaiter.exe:0x01:10811C) 0x005090AC(=CrystalWaiter.exe:0x01:1080AC) 0x00409945(=CrystalWaiter.exe:0x01:008945) c:\program files\borland\cbuilder6\include\vcl\Forms.hpp#936 The bogus value (0xEEEEEEEE) was most likely retrieved by accessing a freed heap area ------------------------------------------ Все действия в обоих приложения одинаковы, никак не могу понят откуда он берет этот адрес и вообще что происходит. Может есть у кого какие мыслишки, буду рад услышать. дебагер останавливается при этом тут: /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { } в Forms.hpp#936 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 14:11 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Сделал еще интереснее: Код: plaintext 1. 2. 3. 4. 5. Все проходит успешно, но как только закрываю форму происходит вышеизложенная ошибка. Такое ощущение что приложение пытается повторно свободить выделенную память... Получается, что когда должен выполниться деструктор формы самой формы уже нет в памяти чтоли, мля ниче понять не могу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 14:39 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxСделал еще интереснее: Код: plaintext 1. 2. 3. 4. 5. Все проходит успешно, но как только закрываю форму происходит вышеизложенная ошибка. Такое ощущение что приложение пытается повторно свободить выделенную память... Получается, что когда должен выполниться деструктор формы самой формы уже нет в памяти чтоли, мля ниче понять не могу А так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:23 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
продолжение следует Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:25 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
TDataModule А так: Код: plaintext 1. 2. 3. 4. 5. А так тоже самое. Более того ваш пример ни о чем не говорит. Ошибки не будет в таком случае только если убрать delete dmPub. Т.е. при закрытии приложения память выделенная под dmPub не будет высвобождаться (ну или она каким-то чудодейственым способом все-таки освобождается). Сложилось впечатление, что при закрытии приложения dmPub освобождается в любом случае, т.е. как будто датамодуль был создан автоматически. если чесно я запутался что куда освобождается. Сейчас сижу удаляю с формы все компоненты и потихоньку проверяю. Есть подозрения, что все это связанно с каким-то компонентом на форме. автор продолжение следует void __fastcall TfrmWaiter::FormCreate(TObject *Sender) { dmPub = new TdmPub(this); } У вас frmWaiter является owner'ом dmPub (благодаря this в кострукторе). Owner сам удаляет всех своих Childo'ов, поэтому повторное удаление не нужно. Я в курсе, что frmWaiter является owner'ом dmPub. В том то и дело, не зависимо кто и как что удаляет. Я специально удалил заранее экземпляр dmPub во втором примере. Ошибка происходит в деструкторе /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { } в Forms.hpp#936 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:43 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Методом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:51 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxОшибка происходит в деструкторе /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { } в Forms.hpp#936 Это либо лишний вызов деструктора (The bogus value (0xEEEEEEEE) was most likely retrieved by accessing a freed heap area ), либо исключение в самом деструкторе. Проверьте, сколько раз вызывается деструктор датамодуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:56 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxМетодом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе Не знаю, кто такой, но раз умеет регистрировать события, то должон уметь и корректно дерегистрировать. Раньше вам просто везло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 15:58 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Деструктор вызывается 1 раз. После выполнения DataModuleDestroy дебагер показывает на строку: в модуле systobj.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:06 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
TSIBfibEventAlerter bigfoxМетодом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе Не знаю, кто такой, но раз умеет регистрировать события, то должон уметь и корректно дерегистрировать. Раньше вам просто везло :) Тут вообще интересная история. Естественно я их корректно и дерегистрирую. До этого поста я делал следующее: создал новый проект, подключил все что нужно, проверил - работает. Начал переносить компоненты с формы проекта с ошибкой на новую работающую форму. И как только я создал там алертер начал появляться глюк. Удалил алертер - глюк исчез. Я решил что в нем проблема и запостил на форум. Открыл багнутый проект и удалил там алертер, однако ошибка не исчезла.... что за ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:11 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxДеструктор вызывается 1 раз. После выполнения DataModuleDestroy дебагер показывает на строку: в модуле systobj.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. По поводу FIB'ов вам лучше спросить непосредственно у разработчиков или у людей, активно использующих эту библиотеку: тут: http://www.sql.ru/forum/actualtopics.aspx?bid=2 или тут: http://ibase.ru/ Скорее всего нужно корректно завершить работу алертера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:14 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxТут вообще интересная история. Естественно я их корректно и дерегистрирую. До этого поста я делал следующее: создал новый проект, подключил все что нужно, проверил - работает. Начал переносить компоненты с формы проекта с ошибкой на новую работающую форму. И как только я создал там алертер начал появляться глюк. Удалил алертер - глюк исчез. Я решил что в нем проблема и запостил на форум. Открыл багнутый проект и удалил там алертер, однако ошибка не исчезла.... что за ... Чудес не бывает... Попробуйте поставить "Use debug DCU" в свойствах проекта и "прогуляться" по исходникам в поисках мины. P.S. Методы научного тыка и копипаста к добру не приводят... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:27 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Use debug DCU P.S. Методы научного тыка и копипаста к добру не приводят... :) угу совершенно согласен, не первый раз натыкаюсь на порблему именно по этому поводу. Спасибо за совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 16:42 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Вобщем все таки однозначно можно сказать, что пока у алертера не установленно свойство database (т.е. он не используется) все работате корректно, иначе - ошибка. Для начала просто откажусь от его использования... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 17:00 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxВобщем все таки однозначно можно сказать, что пока у алертера не установленно свойство database (т.е. он не используется) все работате корректно, иначе - ошибка. Для начала просто откажусь от его использования... Гильотина, конечно, надёжное средство, но излишне радикальное. Попробуйте для начала задать вопрос по вышеприведённым адресам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 17:05 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
Вопрос задам. Но все равно нужно отказываться, хотя бы от использования его в целях обновления наборов данных по событию (тут некоторые в соседних топах серпом по ... за такое обещали :Р), так что пора завязывать..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 17:15 |
|
||
|
Access violation при удалении датамодуля...
|
|||
|---|---|---|---|
|
#18+
bigfoxВопрос задам. Но все равно нужно отказываться, хотя бы от использования его в целях обновления наборов данных по событию (тут некоторые в соседних топах серпом по ... за такое обещали :Р), так что пора завязывать..... Солидарен с некоторыми. Кнопка "Обновить" куда лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2007, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=285&tid=2028509]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 441ms |

| 0 / 0 |
