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