イメージ内のデルタを見つけるために 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
ですか?