2011-10-31 4 views
3

내 프로그램의 메모리 사용량이 무의미하게 증가하고 있음을 알게되었습니다. 특히 cvWaitKey(0)을 사용할 때 내 프로그램은 10 초 안에 메모리 사용량을 엄청나게 늘리는 경향이 있습니다.opencv 함수에서의 메모리 누수

수정 사항이 있습니까, 아니면 OpenCv 버그입니까? 오류 및 이에 대한 해결 방법은 없습니다 보인다

void Show_Image(IplImage *img) 
{ 
    cvNamedWindow("IMAGE_WINDOW", CV_WINDOW_AUTOSIZE); 
    cvSetMouseCallback("IMAGE_WINDOW", GETPIXEL , (void*)img); 
    cvShowImage("IMAGE_WINDOW", img); 
    cvWaitKey(0); 
    cvDestroyWindow("IMAGE_WINDOW"); 
} 
+0

포스트 문제를 보여줍니다 최소한의 완전한 프로그램 (HTTP : 다음 OpenCV의 버그 추적 https://code.ros.org/trac/opencv/wiki

는 또한 메모리의 증가를 측정하기 위해 다양한 방법을 시도에서 티켓을 작성하여 주시기 바랍니다 // sscce.org). 현재의 설명은 너무 모호하여 어림짐작과 이전의 경험으로는 조사 할 수 없습니다. – Mankarse

+0

@Mankarse - 관련 코드를 게시했습니다 ... 확인하십시오. –

답변

2

:

나는 픽셀 값을 얻기 위해 콜백 함수를 설정 한 우리에 Show_Image라는 간단한 기능을 가지고있다. cvWaitkey()를 호출하면이 함수는 모든 윈도우 메시지 대기열을 처리합니다. 그리고 마우스 콜백을 가지고 있기 때문에 항상 무언가를 처리합니다. 프로세스의 실제 메모리 사용량을 표시하는 시스템의 취약한 기능과 결합하여 잘못된 누출 경보를 줄 수 있습니다. 프로세스 메모리가 증가하는

그러나, 문제의 원인을 찾기 위해,

getchar(); 

아래 대기와 같은 프로그램의 코드 줄을 추가 한 다음 메시지에서 얻을 수있는 키를 눌러 cvWaitKey()를 반복 한 다음 getchar() 함수에서 잠시 기다립니다. 그 순간 메모리가 다운되지 않으면 누출 일 수 있습니다. How to measure actual memory usage of an application or process? 또는 Tracking CPU and Memory usage per process