1. 程式人生 > >《MFC使用OpenCV造成記憶體洩漏問題》

《MFC使用OpenCV造成記憶體洩漏問題》

問題描述

新建一個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