warning C4366: The result of the unary '&' operator may be unaligned
这个错误的意思是取地址的对象不是内存对齐的,
比如
#pragma pack(1)
struct a
{
int a;
char b;
double c;
char d;
}
#pragma pack()
如果取结构体a的地址是没问题的,但是如果取结构体a中字段b的地址可能就有问题了,取地址c的话也有问题,因为内存中区地址有4字节或8字节对齐,64位系统或32位系统的地址对齐机制可能不一样。
所以如果出于数据安全需要严格按照单字节对齐,就不能取不对齐的字段的地址了,要取整个结构体的指针,然后用取字段赋值,或者偏移赋值来设置字段的值了。