2011-10-31 51 views
3

私のプログラムのメモリ使用量が時々無意識に増加し続けていることに気づいています。特に私がcvWaitKey(0)を使用しているとき、私のプログラムは10秒でメモリ使用量を巨大なサイズに撃ちます。opencv関数のメモリリーク

これに対応する修正プログラムがありますか、これはOpenCvのバグですか?

は、私は簡単な関数は、ピクセル値を取得するためにコールバック関数を設定している私たちに、Show_Imageと呼ばれています:

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

エラーとこれに対する回避策はありませんようです。 cvWaitkey()を呼び出すと、関数はすべてのウィンドウメッセージキューを処理します。また、マウスコールバックを持っているため、常にそのコールバックが処理されます。これは、プロセスの実際のメモリ使用量を示すシステムの弱い機能と組み合わさって、誤ったリークアラームを与える可能性があります。しかし

getchar(); 

下のメッセージから抜け出すために、任意のキーを押して、増加するプロセスのメモリを待ってのように、あなたのプログラムのコードの行を追加し、問題の原因を見つけるためにcvWaitKey()でループし、getchar()関数で1分間待ってください。その分にメモリがダウンしなければ、リークの可能性があります。 How to measure actual memory usage of an application or process? または Tracking CPU and Memory usage per process

関連する問題