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
Opencv 垃圾回收无法使用[]gocv.Mat_Opencv_Go_Garbage Collection - Fatal编程技术网

Opencv 垃圾回收无法使用[]gocv.Mat

Opencv 垃圾回收无法使用[]gocv.Mat,opencv,go,garbage-collection,Opencv,Go,Garbage Collection,假设img是代码中的3通道Mat。 代码存在内存泄漏。 我猜切片“matsplits”中的指针(引用)不会随着go中的垃圾收集而删除。我怎样才能修好它 for{ matsplits := gocv.Split(img) matsplits[0].Close() matsplits[1].Close() matsplits[2].Close() } 上述代码类型会导致内存泄漏。我确信imgarr中的Mat对象是关闭的,但内存使用量仍在增长。为什么? 更新:我的项目

假设img是代码中的3通道Mat。 代码存在内存泄漏。 我猜切片“matsplits”中的指针(引用)不会随着go中的垃圾收集而删除。我怎样才能修好它

for{
    matsplits := gocv.Split(img)
    matsplits[0].Close()
    matsplits[1].Close()
    matsplits[2].Close()
}
上述代码类型会导致内存泄漏。我确信imgarr中的Mat对象是关闭的,但内存使用量仍在增长。为什么?

更新:我的项目中的部分代码

processed := 0
for processed < proc.imgNumber {
    grayhconcatImg := <-proc.processedImg[0][chindex]
    var roiList roilist
    var numStartPosList numStartPos
    for x := 0; x < 11520-w; x++ {
        test := gocv.NewMat()
        testRegion := grayhconcatImg.img.Region(image.Rect(x, 0, x+w, h))
        gocv.BitwiseXor(chimg, testRegion, &test)
        testRegion.Close()
        //testsplit := gocv.Split(test)
        test.Close()
        //testsplit[0].Close()
        //testsplit[1].Close()

    processed++
}
已处理:=0
对于已处理的
    matsplits := gocv.Split(img)
    matsplits[0].Close()
    matsplits[1].Close()
    matsplits[2].Close()
    runtime.GC()

执行类
GODEBUG=gctrace=1 go run main.go 2>xx.log

你可以在xx中找到gc实际做的事情。log

你错过了
matsplits[2]
。文档没有说明它返回的切片的长度,所以你应该使用循环。这只是一个输入错误。我确信切片的长度总是3。