Освобождение памяти для DLL, динамически связанной с кучей CRT с той же версией после вызова FreeLibrary - PullRequest
0 голосов
/ 31 октября 2018

Из того, что я читал до сих пор, обычно рекомендуется использовать std::shared_ptr, кучу процесса или функцию-оболочку в самой DLL для освобождения памяти, выделенной в DLL. Это, однако, основано на предположении, что приложение и DLL могут не использовать одну и ту же версию CRT, что может привести к аварийному завершению программы, когда приложение освобождает память, выделенную DLL.

Если DLL явно связана с приложением и обе динамически связаны с кучей CRT с гарантией того, что они имеют одинаковую версию CRT, безопасно ли выделять / освобождать память в соответствии с нормой? (т. е. просто обычный new / delete без каких-либо дополнительных вещей)

Кроме того, безопасно ли освобождать память, выделяемую DLL в приложении, после ее освобождения? (т.е. после звонка FreeLibrary)

1 Ответ

0 голосов
/ 31 октября 2018

Помимо версии, также имеет значение, если основная программа и DLL совместно используют одну и ту же копию кучи.

В Visual Studio, чтобы убедиться, что вы должны указать в конфигурации проекта: Runtime Library = Многопоточная DLL или Многопоточная отладочная DLL (/ MD или / MDd) - в обоих DLL проект и основной проект программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...