- 締切済み
ウォッチの値とprintfの値が違う
main関数で構造体に値をセットしています。 構造体はA,B,Cとします。 ここでCをprintfすると"97979"と正しい値が表示されます。 次にV00関数をコールし、この構造体のポインタを渡します。 ここでprintfすると"-11111"と表示されます。 ウォッチでは"97979"が出ています。 "-11111"は、構造体の1つ前のBの値です。 プログラムは"-11111"と判断して処理が続行され 正常に流れません。 どうしたらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- zwi
- ベストアンサー率56% (730/1282)
とりあえずソースコードですね。 (1)structを含んだ構造体の定義 (2)構造体に代入している部分 (3)V00を呼び出しているコード。 (4)VOOの入り口のコード。 (5)値をprintfしている部分。 は最低欲しいです。
- zwi
- ベストアンサー率56% (730/1282)
リリースビルドでデバッグしてませんか? かならずデバッグビルドでウォッチしください。
補足
アクティブな構成の設定はDebugになっています。
- arain
- ベストアンサー率27% (292/1049)
とりあえず、関係する箇所のソースを提示してください。 (変数・構造体の定義、関数の呼び出し方、ウォッチの場所とウォッチしている内容など)
補足
ありがとうございます。 もう少し分かったことがあります。 問題箇所の構造体は、 int iAAA; char cBBB[40]; double dCCC; となっています。 データはCSVファイルのため、読み取ったときはchar型になっています。 main関数で、iAAAに12を代入。iAAAはatoiで代入しています。 cBBBに"111111111111111111111111111111111111111 "を代入。 cBBBは定数のため、memcpyで代入しています。 dCCCに40527を代入しています。 dCCCはatofで代入しています。 これを関数に引き渡すと壊れてしまいます。 iAAAは12437040が表示されます。 cBBBは111111111111111111111111111111111111111 111が表示されます。 dCCCは0.000000が表示されます。 ウォッチでは正しい値が表示されます。
お礼
コードの先頭に #pragma pack(4) と書いてあるせいでした。 お騒がせしました。
補足
(1)typedef struct Inprm{ char C00001[10]; char C00002[10] in_data_t C00003; } typedef struct InData { int iAAA; char cBBB[40]; double dCCC; }in_data_t; (2) p はCSVから取得した文字列のポインタ indtはin_data_tのポインタ 何番目の文字列かでcaseになっています。 int ibuffer; double dbuffer; case(1) ibuffer = atoi(p); indt->C00003.iAAA=ibuffer ; case(3) dbuffer = atof(p); indt->C00003.dCCC=dbuffer ; memcpy(indt->C00003.cBBB,"111111111111・・・ ",sizeof(indt->C00003.cBBB)) (3) VOO(indt) (4) int VOO(in_data_t *iprm) (5) VOOの開始直後に printf("%d\n",iprm->C00003.iAAA); printf("%s\n",iprm->C00003.cBBB); printf("%f\n",iprm->C00003.dCCC); こんな感じです。 ちゃんと書くといろいろ問題になりそうなので 簡単に抜粋しました。