電子書籍の厳選無料作品が豊富!

下記の構造体1、構造体2、使うとき何か違いますか。
ソースAのL4のところ、構造体2の場合は問題がないですが、構造体1だったらエラーになりました。落ちろ原因を教えて頂けませんか。
ソースA:
L1: ST_POSTING_CHUNK* pChunk = m_pDocFreqList->m_pHeadChunk;
L2: while(pChunk)
L3: {
L4: pDocFreqOutput->write((const char*)pChunk->data,pChunk->size);
L5: pChunk = pChunk->next;
L6: }

構造体S1:
#pragma pack(push,1)
struct ST_POSTING_CHUNK
{
longsize;
ST_POSTING_CHUNK*next;
unsigned chardata[1];
};
#pragma pack(pop)

構造体2:
#pragma pack(push,1)
struct ST_POSTING_CHUNK
{
long  size;
unsigned char  data[1];
    ST_POSTING_CHUNK*next;
};
#pragma pack(pop)

A 回答 (1件)

構造体自身が変ですね。



1でも2でもdataは可変長だとしっくりきます。
struct ST_POSTING_CHUNK
{
long size;
ST_POSTING_CHUNK* next;
unsigned char data[1]; ---> unsigned char *data;
};

1だとエラー(暴走?)するというより、2の場合に
data[1] のあと、ポインタ(32bitマシンなら4byte)分の有効なメモリが
あるぶん助かっただけなんじゃないでしょうか?
    • good
    • 0
この回答へのお礼

thanks

お礼日時:2007/09/30 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!