内存泄漏DLL卸载

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


内存泄漏将保留。 操作系统不关心哪个DLL分配了内存,它只关心哪个进程分配了内存。


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

这里有什么可以工作 - 获取由操作系统提供的缺省堆的句柄 - GetProcessesHeap(); 在使用HeapFree()的freelibrary之后释放堆! 这将清除分配给你的整个堆,但是这也可以清除其他动态分配的东西。

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

链接地址: http://www.djcxy.com/p/91027.html

上一篇: Memory leaks on DLL unload

下一篇: How do I stop parsing an XML document with IVBSAXXMLReader in Delphi?