Emgu.CV,CvBlob.BoundingBox抛出System.AccessViolationException

时间:2013-11-05 06:15:59

标签: c# opencv access-violation emgucv

我正在使用Emgu.CV(OpenCV)来查找图片中的delta,但有时我会遇到导致我的应用崩溃的访问冲突异常。

在深入研究后,我发现(blobs.Values):

List<CvBlob> listOfBlobs = blobs.Values.ToList();

返回1733项,当我执行以下操作时:

但是当我在列表中运行时,我得到了EXCEPTION:

 if (resultedRectangles[j].Contains(listOfBlobs[i].BoundingBox))

我检查并发现异常发生在: i = 418

  

+ BoundingBox'(new System.Collections.Generic.Mscorlib_CollectionDebugView(listOfBlobs))。Items [418] .BoundingBox'   抛出了类型的例外   'System.AccessViolationException'System.Drawing.Rectangle   {System.AccessViolationException}

我看到列表中的最后一个有效值是417。

我有两个问题: 1.为什么blobs.Values.ToList();会返回这样的损坏数据? 2.如何在访问之前检查值以阻止System.AccessViolationException

1 个答案:

答案 0 :(得分:1)

您的流程中是否有多个线程?如果有多个线程试图初始化List,那么列表可能会被破坏。

此异常更特定于内存相关问题,除非所有代码都在您的控制范围内,否则您将很难对其进行调试。以下链接可能有所帮助。

http://msdn.microsoft.com/en-us/library/system.accessviolationexception(v=vs.110).aspx

我也遇到了同样的错误。