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

C# Emgu.CV,CvBlob.BoundingBox抛出System.AccessViolationException,c#,opencv,access-violation,emgucv,C#,Opencv,Access Violation,Emgucv,我使用Emgu.CV(OpenCV)在图像中查找增量,但有时我会遇到访问冲突异常,导致我的应用程序崩溃 在深入调试之后,我发现(blobs.Values): 我检查并发现异常发生在:I=418: +BoundingBox'(新System.Collections.Generic.Mscorlib_CollectionDebugView(listOfBlobs)).Items[418]。BoundingBox' 引发了类型为的异常 “System.AccessViolationException”

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

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

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

+BoundingBox'(新System.Collections.Generic.Mscorlib_CollectionDebugView(listOfBlobs)).Items[418]。BoundingBox' 引发了类型为的异常 “System.AccessViolationException”System.Drawing.Rectangle {System.AccessViolationException}

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

我有两个问题: 1.为什么
blobs.Values.ToList()返回这样的损坏数据?

2.如何在访问该值之前检查该值以防止System.AccessViolationException

进程中是否有多个线程?如果有多个线程试图初始化列表,则列表可能会损坏

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


我也被困在同一个错误中。

是的,我有多个线程,函数是静态的(如果函数没有使用任何静态变量(函数的所有局部变量),并且从几个不同的线程发送到此函数的映像(函数调用),则定义函数静态是否有问题,每个线程都有自己的映像实例)如果函数是静态的,并且不访问任何实例变量,那么这是线程安全的。如果通过多个线程初始化blob.Values列表,则会出现问题。调试时,您可以检查blob.Values是否不包含空值。另外,请验证您正在使用的库是否没有与内存相关的问题。
List<CvBlob> listOfBlobs = blobs.Values.ToList();
 if (resultedRectangles[j].Contains(listOfBlobs[i].BoundingBox))