warning C4366: The result of the unary '&' operator may be unaligned

来源:互联网 发布:人工智能计算器在线 编辑:程序博客网 时间:2024/05/21 00:56

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位系统的地址对齐机制可能不一样。

所以如果出于数据安全需要严格按照单字节对齐,就不能取不对齐的字段的地址了,要取整个结构体的指针,然后用取字段赋值,或者偏移赋值来设置字段的值了。

0 0