下面是乙個影象去霧的程式,主函式簡略如下,看一下下面的**有何問題。
int main()
cvreleasecapture(&capture);
cvdestroywindow("result");
return 0;
}
大致說一下一些fast_dahaze是乙個去霧類,負責影象處理,儲存等。程式看起來很簡單,主迴圈裡面做的工作就是獲取一幀影象,處理,顯示。**記憶體洩露了?
一開始我是以為pframe是不是應該在迴圈裡釋放掉,結果我做了,這樣會導致程式異常(因為pframe是乙個指標,指向capture裡面的一幀影象資料,不應該把它釋放)。
記憶體洩露的原因是這樣的,一開始我自作聰明把fast_dehaze寫在大迴圈for外邊,這樣在迴圈外fdh就在迴圈外邊就已經構造完成,並初始化分配一些資源。這樣就不用在for迴圈裡面一次次構造,初始化,能提公升不少程式執行效率呢!
fast_dehaze fdh;
fdh.init(h,w,winsize);
這樣的優化手段不可取,將fdh放在迴圈外,fdh的作用域就是到了main的結束。這樣它其實就一直生存著,沒有被釋放。
fdh.dodehaze(pframe);
每次做影象去霧這個操作時候它都會再次分配空間,也就導致記憶體耗盡了。
正確做法是應該把fast_dehaze物件放在for迴圈裡面,它的作用域就只是迴圈裡面,在迴圈結束時候自動呼叫析構函式,釋放它占有的資源。
改正後的寫法:
int main()
cvreleasecapture(&capture);
cvdestroywindow("result");
return 0;
}
記憶體洩露問題
記憶體洩露是vc中自我認為比較難於解決的問題之一 至少現在解決起來很麻煩了 今天用boundschecker除錯了一下原來自己寫的程式,呵呵!居然提示記憶體洩露40位元組。看到了洩露的 的位置,一處new的地方,由於程式寫過很長時間了,所以想不起來了,乾脆模擬一下吧!程式中第一了乙個結構體,用於儲存...
GDI記憶體洩露問題
在windows系列上做程式設計,gdi是乙個很重要的技術點,有很多程式在執行多次後出現異常,除了眾所周知的記憶體洩露以外,gdi資源洩露也是乙個很直接的原因.今天就把我自己在程式設計中總結的一些經驗給大家分享,歡迎高手補充.1.create出來的gdi物件,一定要用deleteobject來釋放,...
iOS 記憶體洩露問題
記憶體洩露 1.如果在 非arc 下面三行 就出現的記憶體洩露 person person1 person alloc init person person2 person alloc init person1 person2 person1 person2 位址不一樣,這樣把person1指標指向...