Debugging memory leak related to instance with cv::Mat members
Hello all.
This is related to an already posted question, but I think I've reduced the problem to some degree. I'm totally at my wit's end with this and no one I have talked to has been able to see what could be wrong.
Here is all the code. I put in both leaking and non-leaking cases to make the problem more clear.
This plot shows the difference in memory usage in both cases. The only difference in the code between the cases is lines 353 and 449 in clustering.cpp where mergePerceps()
is called only in the leaking case. If I comment out mergePerceps()
no leak, if I comment out line 452 (*(distIter->unit)).clone(newUnit);
no leak, if I remove the cv::Mat members from the class, no leak.
I've tried valgrind memcheck without any hints to the problem, due to the total lack of any explicit allocation.
If there is another Linux user out there that could verify this is reproducible on another machine, I would really appreciate it. One only needs a sequence of appropriately named images to test, see segmentation::readFrame()
line 82 of segmentation.cpp for details. I'm using OpenCV 2.4.5 on Ubuntu Precise 64bit.
It seems I'm using cv::Mats in some unexpected way, so I would be happy to hear what the proper method of doing this operation is to avoid this leak.
If this is a poor use of this system, I apologize. If there is a better venue for this type of question, I'd be happy to move it. Thanks.
Update 1
Here (~70MB) are some test images. The path needs to be changed on line 16 of segmentationClusteringTest.cpp, but the rest should work as I did not change the filenames.
Update 2
ms_print output for leaking (top) and nonleaking (bottom) cases:
You forgot to include your images.
@Nghia See the update above.