如上图所示的结构体
执行以下程序
can_message can_data;
unisgned char *addr=can_data.Data;
int val=*((int *)addr);
这样赋值将会导致内存访问越界(由于4字节对齐,Data[0]-Data[5]将会和DLC,IDE组合为两个四字节,Data[6],Data[7]和后面的sup组合为一个四字节,如上所示访问Date地址的时候会内存越界)。
but,像下图所示的定义结构体就不会出现这样的问题
如上图所示的结构体
执行以下程序
can_message can_data;
unisgned char *addr=can_data.Data;
int val=*((int *)addr);
这样赋值将会导致内存访问越界(由于4字节对齐,Data[0]-Data[5]将会和DLC,IDE组合为两个四字节,Data[6],Data[7]和后面的sup组合为一个四字节,如上所示访问Date地址的时候会内存越界)。
but,像下图所示的定义结构体就不会出现这样的问题