Laex / Delphi-OpenCV

Project Delphi-OpenCV. Translation of OpenCV library header files in Delphi
500 stars 226 forks source link

in demo cv_GetSubRect memory leaks #132

Closed boomsya closed 3 years ago

boomsya commented 4 years ago

lines in demo:

cut_image := cvCreateImage(CvSize(0, 0), image^.depth, image^.nChannels);
cut_image := pIplImage(cvGetSubRect(image, cut_image, R));
cvReleaseImage(cut_image);

при вызове 3000 раз подряд идет утечка около 100кб. я так понимаю в первой создается типа пустышки с заголовком, а потом он перетирается второй коммандой или еще, чего-то после чего тот кусочек памяти теряется.

test:

   for i := 1 to 3000 do begin
      cut_image := cvCreateImage(CvSize(0, 0), image^.depth, image^.nChannels);
      cut_image := pIplImage(cvGetSubRect(image, cut_image, R));
      cvReleaseImage(cut_image);
    end;
    sleep(3000);
   for i := 1 to 3000 do begin
      cut_image := cvCreateImage(CvSize(0, 0), image^.depth, image^.nChannels);
      cut_image := pIplImage(cvGetSubRect(image, cut_image, R));
      cvReleaseImage(cut_image);
    end;
    sleep(3000);
    for i := 1 to 3000 do begin
      cut_image := cvCreateImage(CvSize(0, 0), image^.depth, image^.nChannels);
      cut_image := pIplImage(cvGetSubRect(image, cut_image, R));
      cvReleaseImage(cut_image);
    end;
    sleep(3000);
Laex commented 3 years ago

Everything is correct. It is necessary to free the memory from the old picture.

for i := 1 to 3000 do begin cut_image := cvCreateImage(CvSize(0, 0), image^.depth, image^.nChannels); cut_image1 := pIplImage(cvGetSubRect(image, cut_image, R)); cvReleaseImage(cut_image); cvReleaseImage(cut_image1); end;

boomsya commented 3 years ago

thanks