DLL卸载时内存泄漏

时间:2011-09-23 18:00:11

标签: c++ memory dll memory-leaks

C ++控制台应用程序在运行时使用LoadLibrary()函数加载DLL,然后调用DLL导出的一些函数。一旦应用程序完成DLL,它就会调用FreeLibrary()函数来卸载DLL。 DLL函数调用引起的内存泄漏是否会在卸载DLL时被删除,或者它们将一直保留在那里,直到应用程序终止?

2 个答案:

答案 0 :(得分:8)

内存泄漏将继续存在。操作系统并不关心哪个DLL分配了内存,它只关心分配内存的进程。

答案 1 :(得分:0)

好的!所以这是你如何解决这个问题。 因为它是一个控制台应用程序,我假设你正在创建应用程序,在这种情况下,操作系统为你在堆上创建对象的地方分配堆栈/ virtualmem和堆。一般来说,这些细节都是从我们这里抽象出来的,因为我们只是使用运算符“new”!

这是可行的 - 获取操作系统提供的deafault堆的句柄 - GetProcessesHeap(); 并使用HeapFree()在freelibrary之后释放堆!这将清除分配给您的整个堆,但这可能会清除其他动态分配的内容。

这就是你如何使它工作 - 在加载DLL之前,使用 - HeapCreate()创建从DLL动态分配内容所需的私有堆。 使用HeapAlloc和HeapDealloc而不是new / delete来使用私有堆句柄从dll创建对象。 完成使用库后,使用heapdestroy()释放堆!