如题,文件中设置 #pragma pack(1) 1字节对齐时,结构体中的vector的首地址一定要是奇数地址!
如 0x00226a8f;如果为偶数地址,会出现内存错误导致程序崩溃。
推测原因,应该是字节对齐的问题导致的。
原先的结构体中,(byte:unsigned char, dword:unsigned int)
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
}
执行时没有问题,但在中间加了一个1字节的byte变量后,导致程序奔溃:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
byte ;
std::vector<int> ;
}
查看 vector的首地址,发现上述地址奇偶性的问题,将byte变量放到vector之后,问题解决:
struct CMD_GF_Private_Room_Info
{
byte ;
byte ;
dword ;
byte ;
dword ;
dword ;
dword ;
dword ;
std::vector<int> ;
byte;
}