GDBは同意しません—upclsf
ではなくstruct classifier
、ポインタです。2つの回答のタイプが異なることに注意してください。最初のもの(&upclsf
)はstruct classifier **
、、2番目のもの(upclsf
)はstruct classifier *
です。メモリレイアウトは次のとおりです。
addr 0xbffff184 / upclsf: pointer to 0x2e312e31
addr 0x2e312e31 / *upclsf: (structure data)
次のように変更しますmemcpy
。
memcpy(upclsf, &clsf_ptr, sizeof(struct classifier));
またはおそらく:
memcpy(upclsf, clsf_ptr, sizeof(struct classifier));
memcpy
データを破棄するだけで、タイプセーフではないことに注意してください。したがって、使用するときは、指定するタイプが正しいことを確認するために特に注意する必要があります。次の関数を定義することをお勧めします。
static inline void
classifier_copy(struct classifier *dest, struct classifier const *src)
{
memcpy(dest, src, sizeof(*dest));
}
これにより、タイプエラーがキャッチされます。1回または2回以上コピーする構造に対して、これらの1つを作成します。