2014년 10월 9일 목요일

Mat 를 IplImage로 변환해서 사용하고 난 후 Release 문제

Mat m;
IplImage* ipl;
ipl = &IplImage(m);

 위처럼 변환해서 쓰다가 ipl을 해제 해줘야 겠다라고 생각하고 cvReleaseImag(&Ipl)을 했더니 에러가 나왔다. IplImage가 복사본을 따로 만드는게 아니고 Mat의 Data를 imageData가 참조하고 있는듯 하다.

그래서 아래처럼 테스트 해보니
{
    Mat m;
    IplImage* ipl;
    ipl = &IplImage(m);
}
위처럼 했을때 m이 소멸 되면 ipl의 imageData도 소멸된다. IplImage의 포인터 자체가 소멸되는것은 아니었다. imageData가 사라져서 for문으로 여러번 돌려보아도 메모리 누수는 없었다. 대신 포인터의 주소 값이나 다른 정보들은 살아 있음으로, 보안을 중시한다면 사용후에는 ipl 포인터를 Null로 초기화 해주는것이 좋겠다.

댓글 없음:

댓글 쓰기