Java 查找轮廓函数的异常\u访问\u冲突错误

Java 查找轮廓函数的异常\u访问\u冲突错误,java,video-processing,javacv,Java,Video Processing,Javacv,我使用cvFindContours查找边缘检测帧的轮廓。首先,我使用cvCanny从实际帧中获取边缘帧。然后我试图找到轮廓。这是我的代码结构 //使用cvcanny获取当前帧和下一帧 CvMemStorage curstorage=CvMemStorage.create(); CvMemStorage nextstorage=CvMemStorage.create(); CvSeq cursquares = new CvContour(); CvSeq nextsquares = new Cv

我使用cvFindContours查找边缘检测帧的轮廓。首先,我使用cvCanny从实际帧中获取边缘帧。然后我试图找到轮廓。这是我的代码结构

//使用cvcanny获取当前帧和下一帧

CvMemStorage curstorage=CvMemStorage.create();
CvMemStorage nextstorage=CvMemStorage.create();

CvSeq cursquares = new CvContour();
CvSeq nextsquares = new CvContour();

cvFindContours(cur, curstorage, cursquares, Loader.sizeof(CvContour.class),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

cvFindContours(next, nextstorage, nextsquares, Loader.sizeof(CvContour.class),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
当我运行代码时,我得到了访问冲突异常。以下是异常详细信息

Java运行时环境检测到一个致命错误:

pc=0x0000000062E3320,pid=9184,tid=6236处的异常访问(0xc0000005)

JRE版本:7.0_17-b02 Java虚拟机:Java热点(TM)64位服务器虚拟机(23.7-b01混合模式windows-amd64压缩oops) 有问题的框架: C[msvcr100.dll+0x3c320]内存集+0x80

无法写入核心转储。默认情况下,在客户端版本的Windows上不启用小型转储


由于我刚刚开始使用javacv,所以我不确定哪里出了问题。任何关于这方面的建议都会很有帮助。谢谢。

在调用
cvFindContours
之后,您可能不会引用
CvMemStorage
实例,而只引用
CvSeq
。存储可能被评估为未引用,因此被GCed,而您仍然需要使用CvSeq,这取决于存储。这将在GC发生后第一次使用CvSeq时导致异常访问冲突

尝试添加:

curstorage.release();
nextstorage.release();
在您退出使用CvSeq之后。它有两个优点:它主动释放本机内存而不等待GC,并且防止GC过早释放存储。请看我的问题: