タスクマネージャのメモリの使用量が1M程度の単位で増加する現象があった。
原因は、
src_img_gray = cvCreateImage(cvGetSize(sabunn_img), IPL_DEPTH_8U, 1);
src_img_gray = cvCloneImage(sabunn_img);
この2行は、mallocしてsrc_img_grayのポインタ変数の中身が変わっている。
つまり、前のcvCreateImage関数で作ったヒープ領域のメモリ空間へのアドレスはもはやわからない状態になってしまう。
この後、
cvReleaseImage(&src_img_gray);
としてもcvCloneImage関数で作ったメモリ領域へのアドレスに対しては開放できるが、
cvCreateImage関数で作ったメモリ領域の開放はもはやできない。
対策としては片っぱしから開放だ。
基本的に開放済みを開放してもエラーにはならないようだ。
こんなのもある。
メモリ リークの検出と特定
でも、ファイルを呼び出して処理して保存。。のように繰り返しがない場合は開放はOSがする。
OSが開放の順序をしらないのでエラーになることがあるがかまわない。(言い過ぎか)
「今日の訪問数:
- 」
「昨日の訪問数:
- 」
「今までの訪問数:
- 」
最終更新:2009年12月17日 09:29