JavaCV/OpenCV内存泄漏
我有一个小内存泄漏,我已将其缩小到以下功能:JavaCV/OpenCV内存泄漏,java,opencv,memory-leaks,malloc,javacv,Java,Opencv,Memory Leaks,Malloc,Javacv,我有一个小内存泄漏,我已将其缩小到以下功能: // Input image clusterMat 5-Means clustering, output number of clusters public static float contourDetection(CvMat src_image, Hashtable<Integer, Double> table, double gray_value) { CvMemStorage storage = cvCreateMe
// Input image clusterMat 5-Means clustering, output number of clusters
public static float contourDetection(CvMat src_image, Hashtable<Integer, Double> table, double gray_value) {
CvMemStorage storage = cvCreateMemStorage(0);
CvSeq contours = new CvSeq();
CvSeq ptr = new CvSeq();
int sizeofCvContour = Loader.sizeof(CvContour.class);
float total_num_clusters = 0.0f;
// Find contours
cvFindContours( src_image, storage, contours, sizeofCvContour, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
Integer contour_size = 0;
if (ptr.total() > 0) {
contour_size = (int)cvContourArea(ptr, CV_WHOLE_SEQ, 0);
}
table.put(contour_size, gray_value);
total_num_clusters += 1.0f;
}
// Release storage
storage.release();
contours.deallocate();
ptr.deallocate();
return total_num_clusters;
}
//输入图像聚类Mat 5-均值聚类,输出聚类数
公共静态浮点轮廓检测(CvMat src_图像、哈希表、双灰度值){
CvMemStorage=cvCreateMemStorage(0);
CvSeq等高线=新的CvSeq();
CvSeq ptr=新的CvSeq();
int-sizeofCvContour=Loader.sizeof(CvContour.class);
浮动总数量=0.0f;
//寻找轮廓
cvFindContours(src_图像、存储、轮廓、尺寸、CvContours、CV_RETR_CCOMP、CV_CHAIN_近似简单);
对于(ptr=contours;ptr!=null;ptr=ptr.h_next()){
整数等高线大小=0;
如果(ptr.total()>0){
轮廓大小=(int)cvContourArea(ptr,CV_整体顺序,0);
}
表.put(轮廓尺寸、灰度值);
集群总数+=1.0f;
}
//释放存储
存储。释放();
1.取消分配();
ptr.deallocate();
返回集群总数;
}
在我注释掉对这个函数的调用后,内存泄漏消失了。另外,我在主函数中调用了cvReleaseMat(src_image),因此这不是问题的根源。有人知道问题出在哪里吗?我已经盯着这个看了几个小时了。。。。非常感谢 无需担心,通过更改CvMemStorage=CVCreateMStorage(0)来修复它;to CvMemStorage storage=CvMemStorage.create();。不太清楚为什么会这样。