2013-03-31 146 views
1

我有內存泄漏問題。在這個簡單的程序:C和OpenCV內存泄漏

#include <stdlib.h> 
#include <stdio.h> 
#include "opencv2/core/core.hpp" 
#include "opencv2/highgui/highgui.hpp" 

int main() { 
    CvMat *src; 
    src = cvLoadImageM("p1.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
    cvSaveImage("p2.bmp", src, 0); 
    cvReleaseMat(&src); 
    return 0; 
} 

根據Valgrind的,有7個泄漏:

==10478== HEAP SUMMARY: 
==10478==  in use at exit: 10,464 bytes in 7 blocks 
==10478== total heap usage: 154 allocs, 147 frees, 2,908,450 bytes allocated 
==10478== 
==10478== LEAK SUMMARY: 
==10478== definitely lost: 0 bytes in 0 blocks 
==10478== indirectly lost: 0 bytes in 0 blocks 
==10478==  possibly lost: 0 bytes in 0 blocks 
==10478== still reachable: 10,464 bytes in 7 blocks 
==10478==   suppressed: 0 bytes in 0 blocks 
==10478== Rerun with --leak-check=full to see details of leaked memory 
==10478== 
==10478== For counts of detected and suppressed errors, rerun with: -v 
==10478== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2) 

可有人告訴我如何正確地釋放內存?感謝您的建議。

+8

你沒有證明你有內存泄漏,只有valgrind抱怨。複雜的庫有時會使用分配模式,這些模式被錯誤報告爲valgrind等工具的泄漏。 (例如包含分配池,或者出於性能原因不在exit上運行析構函數。)測試是否處理真實內存泄漏的一種簡單方法是將'main()'的全部內容封裝起來(除了'return'語句)在一個無限循環中。開始這個過程並使用'top'或同等工具觀察它:如果它的內存增長沒有界限,*然後*你手邊有泄漏。 – user4815162342

回答

1

@ user4815162342可能是對的。 雖然我建議你遷移到新的C++OpenCvcv::Mat通過它自動內存管理。

-1

我已經多次看到此泄漏。檢查您發送的詳細錯誤。這可能是pixman lib。