單獨運行OpenCV圖像處理程序正常,整合進MFC界面後報錯:Windows 已在 MFC_opencv.exe 中觸發一個斷點。其原因可能是堆被損壞。
opencv_world4xxd.lib + opencv_world4xxd.dllopencv_world4xx.lib + opencv_world4xx.dll/MDd 或 /MTd/MD 或 /MT| 原因 | 表現 | 解決 |
|---|---|---|
| Debug/Release混用 | new/delete跨堆操作 | 統一運行時庫 |
| Mat對象跨DLL傳遞 | 引用計數錯亂 | 用智能指針或拷貝數據 |
| 數組越界寫入 | 破壞堆元數據 | 啟用邊界檢查/AddressSanitizer |
| 雙重釋放 | 釋放已釋放內存 | RAII/智能指針管理生命周期 |
// 啟用CRT堆檢查(Debug模式)
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF);
// 在可疑代碼前後插入
_ASSERTE(_CrtCheckMemory());
/MD(動態鏈接CRT)cv::Mat時用clone()深拷貝_CrtDumpMemoryLeaks()檢查洩漏堆損壞本質是內存管理不一致,「統一運行時庫、隔離跨邊界對象」是核心原則。