アカウント名:
パスワード:
XXXXの部分を間違って入力しているか、typedefを複数回使っていそう。
dodongaです。
# 守秘義務あるけど、これくらいいいよね(^^:
#pragma pack(push , 1)
const int JADGE_RECORD_MAX_NUM = 1024;>snip
struct JADGE_FILE_HEADER { typedef unsigned char USER_DATA_IND; USER_DATA_IND user_data_ind[JADGE_RECORD_MAX_NUM/(sizeof(USER_DATA_IND)*8)]; unsigned int info_num; JADGE_FILE_HEADER(){ memset(this , 0 , sizeof(JADGE_FILE_HEADER) ); }};#pragma pack(pop)
とりあえず、Visual C++ 2008 Express Edition、ソリューションやら何やらのプロパティに手を付けずにデバッガで見たところ、user_data_indはunsigned char [128]だったよ。
memset(this, 0, sizeof *this);なんて書かないから、その方面については知らない:b
#ふと、JADGEをぐぐってみた
構造体の中でtypedefしているのでメンバーと見なされパディングされた結果でしょうtypedefと構造体の外に出せば解決すると思いますよ
コンストラクタで memset とかヤバくないっすか。
http://www.kijineko.co.jp/tech/superstitions/zero-clear-in-constructor.html [kijineko.co.jp]
そうだね、プログラムが木っ端微塵になったのはこのせいじゃないの?そうでなければ、コンパイラのバグだろう。gcc は 1 になるぞ(gcc も #pragma pack はサポートしている)。
リンク先のはゼロクリアすべきではないものまでゼロクリアしていることが問題。今回のはゼロクリアしてもいいものだから、それ自体は問題とは言えない。ただ、固定長配列のゼロクリアなら初期化子リストで済むよね。基本的には初期化子リストでメンバ変数を初期化。
疑問の解決にはなっていないけど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
怪しいところ (スコア:2)
XXXXの部分を間違って入力しているか、typedefを複数回使っていそう。
具体的にはこう (スコア:1)
dodongaです。
# 守秘義務あるけど、これくらいいいよね(^^:
#pragma pack(push , 1)
const int JADGE_RECORD_MAX_NUM = 1024;
>snip
struct JADGE_FILE_HEADER {
typedef unsigned char USER_DATA_IND;
USER_DATA_IND user_data_ind[JADGE_RECORD_MAX_NUM/(sizeof(USER_DATA_IND)*8)];
unsigned int info_num;
JADGE_FILE_HEADER(){
memset(this , 0 , sizeof(JADGE_FILE_HEADER) );
}
};
#pragma pack(pop)
閑話休題
Re:具体的にはこう (スコア:2)
とりあえず、Visual C++ 2008 Express Edition、ソリューションやら何やらのプロパティに手を付けずにデバッガで見たところ、user_data_indはunsigned char [128]だったよ。
memset(this, 0, sizeof *this);なんて書かないから、その方面については知らない:b
#ふと、JADGEをぐぐってみた
Re: (スコア:0)
構造体の中でtypedefしているのでメンバーと見なされパディングされた結果でしょう
typedefと構造体の外に出せば解決すると思いますよ
Re: (スコア:0)
コンストラクタで memset とかヤバくないっすか。
http://www.kijineko.co.jp/tech/superstitions/zero-clear-in-constructor.html [kijineko.co.jp]
Re: (スコア:0)
そうだね、プログラムが木っ端微塵になったのはこのせいじゃないの?
そうでなければ、コンパイラのバグだろう。gcc は 1 になるぞ(gcc も #pragma pack はサポートしている)。
Re: (スコア:0)
リンク先のはゼロクリアすべきではないものまでゼロクリアしていることが問題。今回のはゼロクリアしてもいいものだから、それ自体は問題とは言えない。ただ、固定長配列のゼロクリアなら初期化子リストで済むよね。基本的には初期化子リストでメンバ変数を初期化。
疑問の解決にはなっていないけど。