|
|
|
Создание/удаление объектов в различных DLL.
|
|||
|---|---|---|---|
|
#18+
Всем привет! Работаю в VC6.0. Структура проекта такова: support.dll - библиотека поддержки. module.dll - модуль host.exe - программа Как запускается: host.exe слинкован с support.dll, при запуске подгружает module.dll. module.dll также, как и host.exe слинкован с support.dll. host.exe вызывает из module.dll функцию, в которой происходит динамическое создание некоторого объекта типа new myObject(), указатель возвращается в host.exe сам объект myObject экспортируется из support.dll, операторы new и delete у него перекрыты, т.е. по идее память для myObject должна выделяться в куче support.dll. Что происходит: выгружается module.dll делается delete object (который был создан в коде module.dll) программа падает. Выглядит это все ровно так, будто память для объекта myObject выделяется в module.dll и указатель после выгрузки module.dll становится недействительным. При этом new для myObject точно вызывается – проверил отладочной печатью. Я решаю проблему так: в support.dll добавляю функцию myObject* CreateMyObject() и вызываю её из module.dll вместо new myObject(). В таком случае удаление объекта после выгрузки module.dll происходит корректно. Собственно, вопрос: почему указатель становится недействительным, если new был вызван из выгруженной DLL, даже если этот new перекрыт и реализован в библиотеке, которая при этом не выгружается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2007, 15:04:06 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=264&tid=2027679]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 364ms |

| 0 / 0 |
