C++ 콘솔 응용 프로그램은 LoadLibrary() 함수를 사용하여 런타임에 DLL을로드 한 다음 DLL에서 내 보낸 일부 함수를 호출합니다. 응용 프로그램이 DLL로 완료되면 FreeLibrary() 함수를 호출하여 DLL을 언로드합니다. DLL이 언로드되거나 응용 프로그램이 종료 될 때까지 DLL 함수 호출로 인해 메모리 누수가 제거됩니까?DLL 언로드시 메모리 누수가 발생했습니다.
2
A
답변
8
메모리 누수가 계속됩니다. OS는 어떤 DLL이 메모리를 할당했는지 신경 쓰지 않고, 어떤 프로세스가 메모리를 할당했는지에만 신경을 쓴다.
0
괜찮 았어! 그래서 여기에이 문제를 해결할 수있는 방법이 있습니다. 그 콘솔 응용 프로그램부터 나는 당신이 응용 프로그램을 만들고 있다고 가정합니다. OS가 스택/가상 메모리를 할당하고 힙을 사용하여 힙에 객체를 생성 할 수있는 힙을 할당합니다. 일반적으로 이러한 세부 사항은 단순히 연산자 new를 사용하므로 추상화됩니다!
다음은 작동 할 수 있습니다. OS에서 제공하는 deafault 힙에 대한 핸들 얻기 - GetProcessesHeap(); 그리고 Freelibrary 후에 HeapFree()를 사용하여 힙을 해제하십시오! 이것은 당신에게 할당 된 전체 힙을 지울 것이지만 이것은 동적으로 할당 된 다른 것들도 지울 수 있습니다.
이것은 DLL을로드하기 전에 을 작동시키는 방법입니다. - HeapCreate()를 사용하여 DLL에서 동적 할당을 위해 필요한 개인 힙을 만듭니다. 새/삭제 대신 HeapAlloc 및 HeapDealloc을 사용하여 개인 힙 핸들로 dll에서 개체를 만듭니다. 라이브러리를 사용하여 완료되면 heapdestroy()를 사용하여 힙을 비우십시오!
관련 문제
- 1. VB에서 메모리 누수가 발생했습니다.
- 2. navBar로 메모리 누수가 발생했습니다.
- 3. MPMoviePlayerController에서 메모리 누수가 발생했습니다.
- 4. NSXMLParser에서 메모리 누수가 발생했습니다.
- 5. JDBC4Connection에서 메모리 누수가 발생했습니다.
- 6. SecItemCopyMatching 메모리 누수가 발생했습니다.
- 7. 코코아에서 메모리 누수가 발생했습니다.
- 8. Excel에서 메모리 누수가 발생했습니다.
- 9. UIButton에서 메모리 누수가 발생했습니다.
- 10. libxml2.2에서 메모리 누수가 발생했습니다.
- 11. 개발 중 메모리 누수가 발생했습니다.
- 12. 인스트루먼트에서 decodeObjectForKey의 메모리 누수가 발생했습니다.
- 13. 안드로이드에서 메모리 추적/누수가 발생했습니다.
- 14. 시뮬레이터에없는 장치에서 메모리 누수가 발생했습니다.
- 15. MBProgressHUD를 사용하여 메모리 누수가 발생했습니다.
- 16. 정적 NSString에서 메모리 누수가 발생했습니다.
- 17. NSString에서 IOS 메모리 누수가 발생했습니다.
- 18. VCial에서 CDialog 메모리 누수가 발생했습니다.
- 19. CoreData로 iphone 메모리 누수가 발생했습니다
- 20. Linux 장치에서 메모리 누수가 발생했습니다.
- 21. iPhone - 메모리 누출 문제 - 메모리 누수가 발생했습니다.
- 22. WpfHWndSource를 사용하는 동안 연속 메모리 누수가 발생했습니다.
- 23. MFC 프로젝트에서 거짓 메모리 누수가 발생했습니다.
- 24. Symfony + Doctrine을 사용하여 PHP에서 메모리 누수가 발생했습니다.
- 25. AudioToolbox 라이브러리에서 메모리 누수가 발생했습니다. AVAudioPlayer
- 26. 스토어 키트로 iPhone 메모리 누수가 발생했습니다.
- 27. UIImageView를 릴리스하고 여전히 메모리 누수가 발생했습니다.
- 28. iPhone - UILabel을 표시하는 동안 메모리 누수가 발생했습니다.
- 29. Classic ASP 응용 프로그램에서 메모리 누수가 발생했습니다.
- 30. 일치 연산자에서 Perl 메모리 누수가 발생했습니다.
그래도 아무 것도 작동하지 않습니다. DLL이 어떤 개체를 할당하고 응용 프로그램에 대한 포인터를 반환했다고 가정합니다. DLL을 언로 드 (Unloading)하면 해당 객체를 해제 할 수 있습니다. 흥미로운 문제가 있습니다. – Voo