代入したのに,代入されてないんです. – プログラミング – Home

代入したのに,代入されてないんです.
 
通知
すべてクリア

[解決済] 代入したのに,代入されてないんです.

固定ページ 1 / 2

merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

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 ダイアログ


引用未解決
トピックタグ
テン
 テン
(@テン)
ゲスト
結合: 23年前
投稿: 35
 

左辺と右辺のオブジェクトが比較演算子!=を別の意味に解釈すことはありえる?
operator!=で別の意味に解釈さすことは可能?
あとはわかりません。


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

operatorはいじくってないんです.


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

unsigned int exchg[800][2]

とか

unsigned int exchg[1000][2]

とかって,予め多めに準備しておく配列の大きさを
変えるたびに,エラーの様子が変わってきます


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

void C**Dlg::OnButtonNmbring()

この関数内で上述の配列を宣言しています

PS

JPEGファイルをDIBに変換し,
画像の中にあるボール(複数個)を認識するのが
目的です.

この関数の役割は,
認識対象物をあるまとまりとして捉え,
数字を割り振る作業を担っているものです.


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

また

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);

ってやっても,やっぱり違うことがわかるんです.


返信引用
com-a
 com-a
(@com-a)
ゲスト
結合: 23年前
投稿: 11
 

exchgとかの変数は動的変数ですか?
静的(static)に変えてみたらどうなりますか?
あと、malloc()を使ってみたらどうなりますか?

ちょっとカンですけど。。。


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

静的です.
unsigned int exchg[1000][2];

初期化

こんな感じでやってましった

明日,動的生成 NEW関数 変数はヘッダのあそこで宣言
(あそこっていうか,メンバ関数?です)

でやってみます


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

昔,VCで,(Cでもいえると思うけど)
関数内で容量の大きい配列を宣言するとよく
ばぐった経験があるので,
あまり大きな配列を宣言したときは,
ひやひやです.
これって,具体的に上限はどこっていうの
あるんですか?


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

書いてないので念のため。

1.m_obj_nmbrnの型、配列数は?
2.exchg_num、i*m_bi_wid+(j-1) それぞれの値は?


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

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)


返信引用
テン
 テン
(@テン)
ゲスト
結合: 23年前
投稿: 35
 

気になることがあるのですが
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' に変換することはできません。(新しい動作 ; ヘルプを参照)


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

す,すみません

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
                        黒なら認識番号

当然のことながら,全力で自力で解決する所存ですが,
関数内における大容量配列取り扱いに関してもし
ご存知な方がいらしたら,よろしくです.

こちらの記述ミスでこのようなエラーがひょっとしたら
出ているかも知れないので,怖いです.


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

うーん、結局のところ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); //不一致


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

アドバイスいただきありがたく思っているのですが,
どうやら,原因不明のバグは原因不明の理由により
直ってました(T_T)

なぜ,解決したのかまったくわかりませんが,
過去ログで,この投稿をご覧になられた方に
深くお詫び申し上げます.

また,アドバイスいただいた数々の御先輩方
ありがとうございました.


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました