-1

次のコードを作成して、offsetof() および container_of() マクロを理解しました。ここで、printf() は、同じアドレスではなく、2 つの異なるアドレスを示しています。私は何を間違っていますか?

#include <stdio.h>
#include <stddef.h>

typedef unsigned char Byte;

#define container(ptr, type, member)               \
({                                                 \
   (type *)((Byte *)ptr - offsetof(type, member)); \
})

typedef struct
{
   size_t size;                  
   void *block;                  
}Header;

int main()
{
   void *ptr = malloc(3);
   Header *pHdr = container(ptr, Header, block);
   printf("%p %p\n", ptr, pHdr->block);
   return 0;
}
4

1 に答える 1