12/08/28 03:49:37.29
main.cpp
URLリンク(paste.factorcode.org)
gff.h
URLリンク(paste.factorcode.org)
Struct[0]->Typeがメモリー上のデータではなくアドレスを指している理由が分かりません。
期待する動作としてはStruct[0]->TypeがStruct[1]->Type以降と同じようにデータを指すことです。
よろしくお願いします。
URLリンク(paste.factorcode.org)
実際の出力
0x005e43e8 Struct[0]->Type 0x005e43e8(6177768)
期待する出力
0x005e43e8 Struct[0]->Type 0xffffffff(4294967295)
586:デフォルトの名無しさん
12/08/28 04:11:30.99
洋ゲーのデータ読み込む宿題とは珍しい
587:デフォルトの名無しさん
12/08/28 04:53:11.55
>>585
test->Struct = (Struct *)(MEMORY_gff + 0x38);
で代入しちゃってるからなぁ
ローカル変数用意してそこに代入した方がいいかもね
Struct *testStruct = (Struct *)(MEMORY_gff + 0x38);
printf("0x%08lx\tStruct[%d]->Type\t0x%08lx(%lu)\r\n", &testStruct[i].Type, i, testStruct[i].Type, testStruct[i].Type);
あとマクロとか使ったほうがいいかもね
URLリンク(ideone.com)
588: ◆GnxmqzQNd3uR
12/08/28 05:12:56.58
>>587
ありがとうございます。
以下のような構造体を作ることは可能なのでしょうか?
可変長の部分は結局ポインタで繋げることになるのでしょうか?
構造体1
|=DWORD aa;
|-int bb;
|-構造体2[bb]
||-int count;
|\-DWORD aaa;
\-構造体3[bb]
|-char foobar[0][50];
|-char foobar[1][50];
\-char foobar[2][50];
589:デフォルトの名無しさん
12/08/28 05:27:50.84
>>588
>可変長の部分は結局ポインタで繋げることになるのでしょうか?
そうなるね
typedef struct {
int attr;
int num;
int items[ ];
} info_t;
info_t *info = malloc(sizeof(info_t) + sizeof(int) * num);
info->num = num;
構造体の最後のメンバである時に限って0長配列メンバは可能だけど
これは全メンバのアドレスが決まっているから可能
590:デフォルトの名無しさん
12/08/28 06:12:13.24
>>589
0長配列が使える様になったのは何時ごろからか知ってる?
昔、Xlib とかの構造体では items[1] とかやってて面倒だった記憶が有るんだけど
591:デフォルトの名無しさん
12/08/28 06:41:31.08
>>590
規格としてはC99からっぽい
URLリンク(seclan.dll.jp)
MS-C ver.6から使えたが、ANSI準拠ではないので大っぴらには使ってなかったようだ
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;