C++控制台应用程序在运行时使用LoadLibrary()函数加载DLL,然后调用由DLL导出的某些函数。一旦应用程序完成DLL,它会调用FreeLibrary()函数来卸载该DLL。 当DLL被卸载时,由DLL函数调用引起的内存泄漏是否也会被移除,或者直到应用程序终止,它们将保持在那里?DLL卸载时的内存泄露
2
A
回答
8
内存泄漏将保留。操作系统不关心哪个DLL分配了内存,它只关心哪个进程分配了内存。
0
好吧!所以这里是你如何解决这个问题。 因为它的一个控制台应用程序我假设你正在创建应用程序在这种情况下操作系统分配堆栈/ virtualmem和堆在哪里你会在堆上创建对象。通常这些细节是从我们这里抽象出来的,因为我们只是使用运算符“新”!
这是什么可能工作 - 得到您的操作系统提供的deafault堆的句柄 - GetProcessesHeap(); 并使用HeapFree()在freeelibrary之后释放堆!这将清除分配给你的整个堆,但是这也可以清除其他动态分配的东西。
这是你如何使它工作 - 加载DLL之前使用 - HeapCreate()从您的DLL动态分配的东西创建所需的私人堆。 使用HeapAlloc和HeapDealloc而不是new/delete来使用您的私人堆处理从您的dll创建对象。 使用heapdestroy()完成使用库后,请释放堆!
相关问题
- 1. 卸载样式表时Mozilla中的内存泄露
- 2. 使用msxml3.dll进行内存泄露
- 3. 在.csv下载的内存泄露
- 4. NSNotificationCenter内存泄露
- 5. IronPython内存泄露?
- 6. Beautifulsoup内存泄露
- 7. BHO内存泄露
- 8. JAXBContext.newInstance内存泄露
- 9. SubstringToIndex内存泄露
- 10. CGContextDrawPDFPage内存泄露
- 11. mscorwks.dll内存泄露
- 12. NSAutorelease内存泄露
- 13. mod_perl内存泄露
- 14. CIContext内存泄露
- 15. expressjs文件下载内存泄露
- 16. 加载动画内存泄露
- 17. jdk1.7.0中的内存泄露
- 18. 的iAD内存泄露
- 19. popToViewController上的内存泄露
- 20. UIImage的内存泄露
- 21. GLFW的内存泄露
- 22. jQuery的cluetip内存泄露
- 23. perl中的内存泄露
- 24. libxml2.2中的内存泄露
- 25. java中的内存泄露
- 26. PyYAML的内存泄露
- 27. java中的内存泄露
- 28. 加载远程内容时发生Objective-C内存泄露
- 29. 使用WKScriptMessageHandler时发生内存泄露
- 30. VS 2015启动时内存泄露?
是的,没有其他的工作。假设DLL分配了一些对象并返回了一个指向应用程序的指针。如果卸载dll会释放该对象,那么我们手边会有一些有趣的问题。 – Voo