调用FreeLibrary后释放具有相同版本的动态链接到CRT堆的DLL的内存

时间:2018-10-31 14:02:53

标签: c++ dll

根据我到目前为止所读的内容,通常建议在DLL本身中使用std::shared_ptr,进程堆或包装函数来释放DLL中分配的内存。但是,这是基于以下假设:应用程序和DLL可能不会共享相同的CRT版本,当应用程序释放DLL分配的内存时,这可能会导致程序崩溃。

如果DLL显式链接到应用程序,并且两者都动态链接到CRT堆并保证它们具有相同的CRT版本,那么按常规分配/释放内存是否安全? (即仅是常规的new / delete,而没有任何其他内容)

此外,通过扩展,释放DLL后释放由DLL在应用程序中分配的内存是否安全? (即致电FreeLibrary之后)

1 个答案:

答案 0 :(得分:0)

除版本外,主程序和DLL是否共享相同的堆副本也很重要。

在Visual Studio中,为了确保这一点,您必须在项目配置中指定:运行时库=多线程DLL或多线程调试DLL(/ MD或/ MDd)-在两者中 DLL项目和主程序项目。