我正在使用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
?
答案 0 :(得分:1)
您的流程中是否有多个线程?如果有多个线程试图初始化List,那么列表可能会被破坏。
此异常更特定于内存相关问题,除非所有代码都在您的控制范围内,否则您将很难对其进行调试。以下链接可能有所帮助。
http://msdn.microsoft.com/en-us/library/system.accessviolationexception(v=vs.110).aspx
我也遇到了同样的错误。