powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание/удаление объектов в различных DLL.
1 сообщений из 1, страница 1 из 1
Создание/удаление объектов в различных DLL.
    #34994353
Фотография selinoth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Работаю в 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 перекрыт и реализован в библиотеке, которая при этом не выгружается?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание/удаление объектов в различных DLL.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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