I hope if some one can answer my question and clarify the details .
IplImage* out;
out = doPyrDown( in, IPL_GAUSSIAN_5x5 );
out = doPyrDown( out, IPL_GAUSSIAN_5x5 );
out = doCanny( out, 10, 100, 3 );
// do whatever with ‘out’
//
...
cvReleaseImage ( &out );
I read in Learning opencv this is not a problem . how is it fine ?! every method doPyrnDown & doCanny allocate Image and return the address of the Image (it's pointer) . I know that this situation lead to memory leaks . if not i think the IplImage structure has a list of addresses dynamically updated during run-time of the program .