Windows Mobile:
char *p = new char[5];
memset(p,0,5);
int s;
s = *(int*)(p+0); //不出错 s=0;
s = *(int*)(p+1); //出错
delete[] p;
原因:
p+0=0x00362970; // 能被4整除。符合4字节对齐条件。所以不出错
p+1=0x00362971; // 不能被4整除。不符合4字节对齐条件。所以出错
上述代码在Windows下不会出错。估计是windows不是严格要求4字节对齐,对于
嵌入式系统Windows Mobile则严格要求4字节对齐。
最保险的做法是使用memcpy
memcpy(&s,p+0,sizeof(s));
memcpy(&s,p+1,sizeof(s));
这样肯定不会出错了