「だんだん重くなる」場合は、タスクマネージャ(ctrl+alt+delete)のメモリが一方的に増えていないか確認すること。
C言語ではブロック { }の中で宣言した変数はスタック上に作られる。
{ }を抜ければスタックの巻き戻しをして{ }に入る前の位置までスタックが指すポインタは巻戻っている。
だから、スタックの使用領域は増えない。(自動変数)
一方、mallocな関数はヒープ領域といって実行時に動的にメモリを使ったり、開放したりするメモリの領域。
この領域は開放しないと再利用できない(スタックは自動的に巻き戻しがおこるが)。
そのプロセスが終了するときにはOSが開放してくれるが、長く動くサービスのようなアプリケーションは通常「固まる」「重い」症状がでる。
そのため、タスクマネージャで動作を確認し解決すべきだ。
OpenCVの関数名に
create
clone
load
alloc
を含むと疑おう。
メモリーリークの問題にぶちあたらないようにコンパイル、実行したらタスクマネージャでメモリを監視しよう。
このような関数を使ったら
release
free
を使おう。
メモリ解放済みの変数を解放てもエラーにならない。
ただし、
NULLを開放しようとすると Bad argument のエラーのメッセージボックスがでる。
また、cvReleaseeImageなんかはポインタのポインタ。freeはポインタが引数。
void cvRelease( void** struct_ptr );
void cvReleaseMemStorage( CvMemStorage** storage );
void cvReleaseImage( IplImage** image );
void free(void *ptr);//これはCのstring.hのライブラリ関数
終了後固まる場合はカメラの開放ができていないことがおおい。
cvReleaseCapture(&capture);
関連
「今日の訪問数: - 」
「昨日の訪問数: - 」
「今までの訪問数: - 」
最終更新:2010年02月05日 15:33