0

我使用 Emgu.CV (OpenCV) 来查找图像中的增量,但有时我会遇到访问冲突异常,导致我的应用程序崩溃。

在深入调试后,我发现(blobs.Values):

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

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

但是当我浏览列表时,我得到了例外:

 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。

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

4

1 回答 1

1

你的进程中有多个线程吗?如果有多个线程尝试初始化列表,则列表可能会损坏。

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

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

我也陷入了同样的错误。

于 2013-11-05T06:18:21.840 回答