Java调用opencv内存泄漏_在OpenCV应用程序中,如何识别内存泄漏源并进行修复?...

我的OpenCV应用程序中有内存泄漏。它是一个中等大小的应用程序,带有dozon类和几千行代码。不知何故,我在我的应用程序中设法产生了大量内存泄漏,它在几分钟内将我所有的8GB内存吞掉了。我在CMake上使用Ubuntu 11.10上的OpenCV C++ 2.3。

V8RcJ.png

这是一款手动跟踪应用程序,它可以为每台摄像机以15fps的帧率同时处理两个视频流。

我尝试使用下面的valgrind,但valgrind的输出非常巨大,超过了shell可以保留在缓冲区中的数量。我知道我可以将输出保存到一个日志文件中,但我希望避免通读所有内容的艰巨任务。这是我使用的valgrind命令:

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./Gibbon这里是valgrind输出的最后几行:

==3573== 5,415,576 (1,176 direct, 5,414,400 indirect) bytes in 7 blocks are definitely lost in loss record 2,571 of 2,571

==3573== at 0x4C28F9F: malloc (vg_replace_malloc.c:236)

==3573== by 0x5B2ACD0: cv::fastMalloc(unsigned long) (in /usr/local/lib/libopencv_core.so.2.3.1)

==3573== by 0x5A7FA9D: cvCreateImageHeader (in /usr/local/lib/libopencv_core.so.2.3.1)

==3573== by 0x484538: CameraPGR::convertImageToOpenCV(FlyCapture2::Image*) (CameraPGR.cpp:212)

==3573== by 0x483F52: CameraPGR::grabImage() (CameraPGR.cpp:134)

==3573== by 0x473F86: start() (GibbonMain.cpp:368)

==3573== by 0x4725CC: main (GibbonMain.cpp:108)

==3573==

==3573== LEAK SUMMARY:

==3573== definitely lost: 24,432 bytes in 33 blocks

==3573== indirectly lost: 5,414,640 bytes in 15 blocks

==3573== possibly lost: 2,314,837 bytes in 1,148 blocks

==3573== still reachable: 496,811 bytes in 4,037 blocks

==3573== suppressed: 0 bytes in 0 blocks

==3573==

==3573== For counts of detected and suppressed errors, rerun with: -v

==3573== Use --track-origins=yes to see where uninitialised values come from

==3573== ERROR SUMMARY: 336 errors from 318 contexts (suppressed: 10 from 8)有什么更好的方法可以解决这个问题?是否有一些工具能够以简洁的方式向我展示哪些函数调用导致大部分内存分配?如果valgrind是答案,我将不胜感激关于如何以更高效的方式使用它的一些提示,因为我对此工具完全陌生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值