0

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

4

1 に答える 1

1

プロセスに複数のスレッドがありますか? 複数のスレッドがリストを初期化しようとしている場合、リストが破損する可能性があります。

この例外は、メモリ関連の問題に固有のものであり、すべてのコードを制御できない限り、これをデバッグするのは困難です。次のリンクが役立つ場合があります。

http://msdn.microsoft.com/en-us/library/system.accessviolationexception(v=vs.110).aspx

私も同じエラーに巻き込まれました。

于 2013-11-05T06:18:21.840 に答える