1. 程式人生 > >MFC+OpenCV Debug正常Release模式下記憶體錯誤

MFC+OpenCV Debug正常Release模式下記憶體錯誤

出現這樣的問題多半是自己程式碼有問題,需要仔細排查

我的問題如下:

frame為Mat

pResult為IplImage

之前用如下方式拷貝影象

pResult = &IplImage(frame);

而MFC的Release模式下frame的記憶體會被自動回收掉,pResult會發生記憶體錯誤

奇怪的是同樣的程式碼在控制檯應用程式的Release模式中執行正常

修改為以下程式碼可解決:

IplImage imgTmp = frame;
pResult = cvCloneImage(&imgTmp);

這裡cvCloneImage為影象的深拷貝,使用前不用為pResult分配記憶體,該函式會自動開闢一片記憶體

如果處理視訊,注意每幀使用結束後要釋放pResult的記憶體,否則會造成記憶體洩露

如果沒有這樣的問題或者不想修改程式碼可將VS設定中

屬性 ——> C/C++ ——> 所有選項 ——> 優化 

由使速度最大化(/O2) 改為已禁用(/Od)

可保證Release模式執行效果和debug模式一致

但不推薦這樣做,這樣做的代價是失去了Release優化的意義

還是儘量排查程式碼中存在的問題