C# Emgu.CV,CvBlob.BoundingBox抛出System.AccessViolationException
我使用Emgu.CV(OpenCV)在图像中查找增量,但有时我会遇到访问冲突异常,导致我的应用程序崩溃 在深入调试之后,我发现(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”
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))