C・C++Debug日記2

「C・C++Debug日記2」の編集履歴(バックアップ)一覧に戻る

C・C++Debug日記2 - (2008/10/15 (水) 17:25:12) のソース

#contents
*BB1からBB2への移行方法まとめ1
1.基本手順
(1)BB2の基本動作プログラム(カメラから画像を取って表示するヤツ)からひたすらコードを投入。この段階では基本的にコードを消さない。
(2)BB2から得られるもの確認。今回は
 triclopsContext , triclopsInput , triclopsImage , IplImage(Color , Rect , Edge , Disp)
(3)BB1上のプログラムと対応するものとの違い確認→変換
(4)triclops関係は変換不可能なので直接書き換え(距離取得部分とか)
2.躓いた所
(1)IplImageの〔チャンネル、ビットデプス、サイズ〕の確認を怠りcvGetMatでエラーを連発&混乱に陥る。以下のエラーメッセージがよく出た。
---------------------------
OpenCV GUI Error Handler
---------------------------
Null pointer (The image has NULL data pointer)
in function cvGetMat, C:\User\VP\opencv\cxcore\src\cxarray.cpp(2794)
Press "Abort" to terminate application.
Press "Retry" to debug (if the app is running under debugger).
Press "Ignore" to continue (this is not safe).
---------------------------
中止(A)   再試行(R)   無視(I)   
---------------------------
(2)画像変換の知識不足(チャンネル数変更、Header⇔Image変更)
(3)距離検出はtriclopsImageを使用していることに途中まで気付かなかった(triclopsContextなどの変更が遅れた)

*ハンドルされていない例外4
1.ErrorMessage
~~~.exe の 0x7c94fe40 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000100 を読み込み中にアクセス違反が発生しました。
2.原因
コードミス。
3.解決策
以下のように変更した。
 wsprintf( s, TEXT( "KeyCode = %0x, Ctrl = %s, Shift = %s, Caps = %s",	wParam, ctrl, shift, caps));
 ↓
 wsprintf( s, TEXT( "KeyCode = %0x, Ctrl = %s, Shift = %s, Caps = %s"),	wParam, ctrl, shift, caps);
4.考察
+ハンドルされていない例外→使用している関数に与える引数の失敗。値のミスではなく、引数部分の形が間違っている場合が多い?
+「0x7c94fe40」や「0xC0000005: 場所 0x00000100」などに深い意味はない。文字通り場所を表しているのみ。
+デバッガで指定された部分のコードをよく読んだ方が解決の近道になる?
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。