我使用Emgu.CV(OpenCV),在圖像中查找增量,但有時我得到訪問衝突異常,導致我的應用程序崩潰。Emgu.CV,CvBlob.BoundingBox throw System.AccessViolationException
在調試挖後,我發現(blobs.Values
):
List<CvBlob> listOfBlobs = blobs.Values.ToList();
回報1733項,當我做到以下幾點:
但是,當在列表中運行,我得到例外:
if (resultedRectangles[j].Contains(listOfBlobs[i].BoundingBox))
我檢查並發現異常發生在:i = 418:
+的BoundingBox '(新System.Collections.Generic.Mscorlib_CollectionDebugView(listOfBlobs))。項目[418] .BoundingBox' 扔類型 'System.AccessViolationException' System.Drawing.Rectangle {系統的異常。 AccessViolationException}
正如我在列表中看到的最後一個有效值是417
我有2個問題: 1.爲什麼blobs.Values.ToList();
回報這類腐敗的數據? 2.如何在訪問它之前檢查值以防止System.AccessViolationException
?
是的我有多線程,並且該函數是靜態的(當它沒有使用任何靜態變量(所有函數都是本地函數)時定義函數static時有任何問題,並且發送到此函數的圖像(函數調用)從少數差異線程,每個線程都有自己的圖像實例) – Joseph
如果該函數是靜態的並且不訪問任何實例變量,那麼這是線程安全的。如果blob.Values列表的初始化是通過多個線程完成的,則會出現問題。在調試時,您可以檢查blobs.Values是否包含空值。另請確認您使用的庫是否存在內存相關問題。 – Vivasaayi