exchg[exchg_num][0]=m_obj_nmbrn[i*m_bi_wid+(j-1)];
if(exchg[exchg_num][0]!=m_obj_nmbrn[i*m_bi_wid+(j-1)])
MessageBox(強烈にバグってる);
これで,メッセージボックスが出てくるのって,おかしいですよね・・・
でも,出てきます・・・(T_T)
わけわかんないです・・・涙
これって,ありえますか?
解決方法なんてないですよね・・・うぅ
win2k MFC ダイアログ
左辺と右辺のオブジェクトが比較演算子!=を別の意味に解釈すことはありえる?
operator!=で別の意味に解釈さすことは可能?
あとはわかりません。
operatorはいじくってないんです.
unsigned int exchg[800][2]
とか
unsigned int exchg[1000][2]
とかって,予め多めに準備しておく配列の大きさを
変えるたびに,エラーの様子が変わってきます
void C**Dlg::OnButtonNmbring()
この関数内で上述の配列を宣言しています
PS
JPEGファイルをDIBに変換し,
画像の中にあるボール(複数個)を認識するのが
目的です.
この関数の役割は,
認識対象物をあるまとまりとして捉え,
数字を割り振る作業を担っているものです.
また
exchg[exchg_num][0]=m_obj_nmbrn[i*m_bi_wid+(j-1)];
if(exchg[exchg_num][0]!=m_obj_nmbrn[i*m_bi_wid+(j-1)])
MessageBox(強烈にバグってる);
でなくても
exchg[exchg_num][0]=m_obj_nmbrn[i*m_bi_wid+(j-1)];
CString wkss;
wkss.Format(%d %d って一緒だよね?(T_T) ,
exchg[exchg_num][0],m_obj_nmbrn[i*m_bi_wid+(j-1)]);
MessageBox(wkss);
ってやっても,やっぱり違うことがわかるんです.
exchgとかの変数は動的変数ですか?
静的(static)に変えてみたらどうなりますか?
あと、malloc()を使ってみたらどうなりますか?
ちょっとカンですけど。。。
静的です.
unsigned int exchg[1000][2];
↓
初期化
こんな感じでやってましった
明日,動的生成 NEW関数 変数はヘッダのあそこで宣言
(あそこっていうか,メンバ関数?です)
でやってみます
昔,VCで,(Cでもいえると思うけど)
関数内で容量の大きい配列を宣言するとよく
ばぐった経験があるので,
あまり大きな配列を宣言したときは,
ひやひやです.
これって,具体的に上限はどこっていうの
あるんですか?
書いてないので念のため。
1.m_obj_nmbrnの型、配列数は?
2.exchg_num、i*m_bi_wid+(j-1) それぞれの値は?
1.m_obj_nmbrnの型、配列数は?
unsigned int m_obj_nmbrn[500~1000ぐらい][2];
2.exchg_num、i*m_bi_wid+(j-1) それぞれの値は?
上述の宣言時配列大きさ800~1000を変えると,
ちょっと,かわってきちゃってなんとも言えませんが
例えば,
exchg_numの初期値は初期化により0なのは当然で
そこに
i*m_bi_wid+(j-1)(=17)を代入すると
次の行で exchg_numが5 とかになってます(T_T)
気になることがあるのですが
unsigned int m_obj_nmbrn[500~1000ぐらい][2]; <-2次元配列
ungigned int exunschg[1000][2]; <-同じく2次元配列
次の代入式のところで
>exchg[exchg_num][0]=m_obj_nmbrn[i*m_bi_wid+(j-1)];
次のようなコンパイルエラーはでないのですか?
:\PRG\bug\bugDlg.cpp(181) : error C2440: '=' : 'unsigned int [2]' か
ら 'unsigned int' に変換することはできません。(新しい動作 ; ヘルプを参照)
す,すみません
unsigned int m_obj_nmbrn[500~1000ぐらい][2];
こちらは,二次元配列ではなくて
unsigned int* m_obj_nmbrn;
m_obj_nmbrn=new unsigned int[m_bi->biHeader.biWidth*m_bi->biHeader.biWidth];
の間違いです.質問者の立場で,こういうミスをしてしまい
大変申し訳ありません.
PS (本題とは関係ないですが・・・)
m_obj_nmbrn の初期化した値は 0.
m_obj_nmbrn は,m_obj_nmbrn[**]で示すドットが白なら初期値のままの0
黒なら認識番号
当然のことながら,全力で自力で解決する所存ですが,
関数内における大容量配列取り扱いに関してもし
ご存知な方がいらしたら,よろしくです.
こちらの記述ミスでこのようなエラーがひょっとしたら
出ているかも知れないので,怖いです.
うーん、結局のところm_obj_nmbrnの容量はいかほどになるのでしょう。
また、i*m_bi_wid+(j-1)が17なのでしょうか、m_obj_nmbrn[i*m_bi_wid+(j-1)]が17なので
しょうか。
落ち着いて情報を一度整理してください。
# 話をシンプルにするとこういうことですか?
unsigned int exchg[1000][2];
unsigned int* m_obj_nmbrn;
m_obj_nmbrn=new unsigned int[m_bi->biHeader.biWidth*m_bi->biHeader.biWidth];
//biWidth * biHeight?
exchg[0][0]=m_obj_nmbrn[17];
CString wkss;
wkss.Format(%d %d って一緒だよね?(T_T) ,
exchg[0][0],m_obj_nmbrn[17]);
AfxMessageBox(wkss); //不一致
アドバイスいただきありがたく思っているのですが,
どうやら,原因不明のバグは原因不明の理由により
直ってました(T_T)
なぜ,解決したのかまったくわかりませんが,
過去ログで,この投稿をご覧になられた方に
深くお詫び申し上げます.
また,アドバイスいただいた数々の御先輩方
ありがとうございました.