问题是这样的:
环境keil(一种嵌入式的IDE)
typedef struct _RIP_MSG
{
uint8_t op;
uint8_t htype;
uint8_t hlen;
uint8_t hops;
uint32_t xid;
uint16_t secs;
uint16_t flags;
uint8_t ciaddr[4];
uint8_t yiaddr[4];
uint8_t siaddr[4];
uint8_t giaddr[4];
uint8_t chaddr[16];
uint8_t sname[64];
uint8_t file[128];
uint8_t OPT[312];
}RIP_MSG;
uint8_t EXTERN_DHCPBUF[1024];
RIP_MSG* pRIPMSG = (RIP_MSG*)EXTERN_DHCPBUF;
上面是定义了一个结构体,一段可用空间,以及让结构体指针指向这段空间的首地址。一切看上去还很平静。
当执行:
memset((void *)pRIPMSG, 0, sizeof(RIP_MSG));语句时,偶尔会死机。
原因后来发现了,当
uint8_t EXTERN_DHCPBUF[1024] __attribute__((aligned(4))); 对该数组四字节对齐时,就不会出错。
然后本人就怀疑是 memset的问题,网上也有提到,memset需要4字节对齐。