Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaCV/OpenCV内存泄漏_Java_Opencv_Memory Leaks_Malloc_Javacv - Fatal编程技术网

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();。不太清楚为什么会这样。