《MFC使用OpenCV造成記憶體洩漏問題》
阿新 • • 發佈:2019-01-09
問題描述
新建一個MFC應用程式,匯入OpenCV,只要使用了OpenCV裡面的東西(假設定義了一個Mat變數),當程式在執行時,不會有任何反應,但是當點選應用程式右上角的叉叉關閉程式時,那麼問題就來了,輸出視窗會出現一大堆記憶體洩漏問題,這是假記憶體洩漏,如下圖所示:
Detected memory leaks! Dumping objects -> {680} normal block at 0x01147EB0, 56 bytes long. Data: <@ > 40 04 E9 0F 00 00 00 00 00 00 00 00 CD CD CD CD {679} normal block at 0x01147AE8, 908 bytes long. Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 80 02 00 00 {356} normal block at 0x0114E170, 87 bytes long. Data: < p > CD CD CD CD CD CD CD CD CD CD CD CD 70 E1 14 01 {355} normal block at 0x0114E0E0, 83 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD E0 E0 14 01 {353} normal block at 0x0114DD00, 72 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD 00 DD 14 01 {352} normal block at 0x0114DC90, 48 bytes long. Data: <GeneralizedHough> 47 65 6E 65 72 61 6C 69 7A 65 64 48 6F 75 67 68
解決方法
1、找到當前專案的解決方案資源管理器,選擇專案名稱,點選滑鼠右鍵,選擇最底下的屬性選項。
2、點選屬性選項之後,進入屬性頁面,依次找到配置屬性、連結器、輸入、延遲載入的DLL選項,然後去把OpenCV的bin檔案下的所有dll的名稱新增到延遲載入的DLL中,新增完之後,點選確定,然後再執行一下程式,基本上就沒有記憶體洩漏出現了。
3、我把所有dll貼上來,用的是OpenCV2410的,有需要的自己改下
opencv_contrib2410.dll opencv_core2410.dll opencv_features2d2410.dll opencv_flann2410.dll opencv_gpu2410.dll opencv_highgui2410.dll opencv_imgproc2410.dll opencv_legacy2410.dll opencv_ml2410.dll opencv_nonfree2410.dll opencv_objdetect2410.dll opencv_ocl2410.dll opencv_photo2410.dll opencv_stitching2410.dll opencv_superres2410.dll opencv_ts2410.dll opencv_video2410.dll opencv_videostab2410.dll opencv_contrib2410d.dll opencv_core2410d.dll opencv_features2d2410d.dll opencv_flann2410d.dll opencv_gpu2410d.dll opencv_highgui2410d.dll opencv_imgproc2410d.dll opencv_legacy2410d.dll opencv_ml2410d.dll opencv_nonfree2410d.dll opencv_objdetect2410d.dll opencv_ocl2410d.dll opencv_photo2410d.dll opencv_stitching2410d.dll opencv_superres2410d.dll opencv_ts2410d.dll opencv_video2410d.dll opencv_videostab2410d.dll