powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Access violation при удалении датамодуля...
17 сообщений из 17, страница 1 из 1
Access violation при удалении датамодуля...
    #34667157
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять где собака порылась. Есть датамодуль (dmPub) в отдельном bpl. Есть два приложения в которых подключен данный bpl . В обоих приложениях при создании главной формы происходит следующее:

Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub(this);
...
}

В первом приложении при его закрытии и соответсвенно удалении 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
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667309
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал еще интереснее:

Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfrmWaiter::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub(this);
 delete dmPub;
}

Все проходит успешно, но как только закрываю форму происходит вышеизложенная ошибка. Такое ощущение что приложение пытается повторно свободить выделенную память... Получается, что когда должен выполниться деструктор формы самой формы уже нет в памяти чтоли, мля ниче понять не могу
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667533
TDataModule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxСделал еще интереснее:

Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfrmWaiter::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub(this);
 delete dmPub;
}

Все проходит успешно, но как только закрываю форму происходит вышеизложенная ошибка. Такое ощущение что приложение пытается повторно свободить выделенную память... Получается, что когда должен выполниться деструктор формы самой формы уже нет в памяти чтоли, мля ниче понять не могу
А так:

Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfrmWaiter::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub( 0 );
 delete dmPub;
}
или так:
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667544
TDataModule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
продолжение следует
Код: plaintext
1.
2.
3.
4.
void __fastcall TfrmWaiter::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub(this);
}
У вас frmWaiter является owner'ом dmPub (благодаря this в кострукторе). Owner сам удаляет всех своих Childo'ов, поэтому повторное удаление не нужно.
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667645
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TDataModule
А так:

Код: plaintext
1.
2.
3.
4.
5.
void __fastcall TfrmWaiter::FormCreate(TObject *Sender)
{
 dmPub = new TdmPub( 0 );
 delete dmPub;
}


А так тоже самое. Более того ваш пример ни о чем не говорит. Ошибки не будет в таком случае только если убрать 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
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667679
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667707
TDataModule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 ), либо исключение в самом деструкторе.

Проверьте, сколько раз вызывается деструктор датамодуля.
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667721
TSIBfibEventAlerter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxМетодом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе
Не знаю, кто такой, но раз умеет регистрировать события, то должон уметь и корректно дерегистрировать. Раньше вам просто везло :)
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667764
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Деструктор вызывается 1 раз. После выполнения DataModuleDestroy дебагер показывает на строку:
в модуле systobj.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
       template <class T> class RTL_DELPHIRETURN DelphiInterface
        {
        private:
          T       *intf;

          /* This is a temp hack to allow the C++ compiler to allow us to derrive
                 from DelphiInterface even though we're not implementing and methods
           */
  //    virtual void __InternalPureHack() = 0;

        public:
          __fastcall DelphiInterface<T>() : intf( 0 )
->>    {}   // вот тут то и наступет ошибка 

...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667787
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TSIBfibEventAlerter bigfoxМетодом научного тыка выяснилось, что на форме находится TSIBfibEventAlerter и ошибка связанна с ним. Если зарегесртировать события алертера, то при закрытии приложения произойдет такая вот кака. Не пойму только теперь из-за чего все таки это происходит. Не раз пользовался ранне этими алертерами и все ок. а тут на тебе
Не знаю, кто такой, но раз умеет регистрировать события, то должон уметь и корректно дерегистрировать. Раньше вам просто везло :)

Тут вообще интересная история. Естественно я их корректно и дерегистрирую. До этого поста я делал следующее: создал новый проект, подключил все что нужно, проверил - работает. Начал переносить компоненты с формы проекта с ошибкой на новую работающую форму. И как только я создал там алертер начал появляться глюк. Удалил алертер - глюк исчез. Я решил что в нем проблема и запостил на форум. Открыл багнутый проект и удалил там алертер, однако ошибка не исчезла.... что за ...
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667799
TSIBfibEventAlerter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxДеструктор вызывается 1 раз. После выполнения DataModuleDestroy дебагер показывает на строку:
в модуле systobj.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
       template <class T> class RTL_DELPHIRETURN DelphiInterface
        {
        private:
          T       *intf;

          /* This is a temp hack to allow the C++ compiler to allow us to derrive
                 from DelphiInterface even though we're not implementing and methods
           */
  //    virtual void __InternalPureHack() = 0;

        public:
          __fastcall DelphiInterface<T>() : intf( 0 )
->>    {}   // вот тут то и наступет ошибка 

По поводу FIB'ов вам лучше спросить непосредственно у разработчиков или у людей, активно использующих эту библиотеку:
тут: http://www.sql.ru/forum/actualtopics.aspx?bid=2
или тут: http://ibase.ru/

Скорее всего нужно корректно завершить работу алертера...
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667848
Use debug DCU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxТут вообще интересная история. Естественно я их корректно и дерегистрирую. До этого поста я делал следующее: создал новый проект, подключил все что нужно, проверил - работает. Начал переносить компоненты с формы проекта с ошибкой на новую работающую форму. И как только я создал там алертер начал появляться глюк. Удалил алертер - глюк исчез. Я решил что в нем проблема и запостил на форум. Открыл багнутый проект и удалил там алертер, однако ошибка не исчезла.... что за ...
Чудес не бывает... Попробуйте поставить "Use debug DCU" в свойствах проекта и "прогуляться" по исходникам в поисках мины.

P.S. Методы научного тыка и копипаста к добру не приводят... :)
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667912
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Use debug DCU

P.S. Методы научного тыка и копипаста к добру не приводят... :)

угу совершенно согласен, не первый раз натыкаюсь на порблему именно по этому поводу. Спасибо за совет.
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34667993
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем все таки однозначно можно сказать, что пока у алертера не установленно свойство database (т.е. он не используется) все работате корректно, иначе - ошибка.

Для начала просто откажусь от его использования...
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34668017
Guillotine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxВобщем все таки однозначно можно сказать, что пока у алертера не установленно свойство database (т.е. он не используется) все работате корректно, иначе - ошибка.

Для начала просто откажусь от его использования...
Гильотина, конечно, надёжное средство, но излишне радикальное.
Попробуйте для начала задать вопрос по вышеприведённым адресам.
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34668044
bigfox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос задам. Но все равно нужно отказываться, хотя бы от использования его в целях обновления наборов данных по событию (тут некоторые в соседних топах серпом по ... за такое обещали :Р), так что пора завязывать.....
...
Рейтинг: 0 / 0
Access violation при удалении датамодуля...
    #34668145
Refresh.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bigfoxВопрос задам. Но все равно нужно отказываться, хотя бы от использования его в целях обновления наборов данных по событию (тут некоторые в соседних топах серпом по ... за такое обещали :Р), так что пора завязывать.....
Солидарен с некоторыми. Кнопка "Обновить" куда лучше.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Access violation при удалении датамодуля...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]