项目场景:
在做一个io模块的时候,需要char数组转结构体数组,结构体里面有float;例如
typedef struct _a
{
char i;
float v;
}A;
typedef struct _b
{
char i;
void *a1;
void *a2;
}B;
char buff[1000];
int size = sizeof(B);
B* pB = (B*)buff;
pB[0].a1 = buff + size;
pB[0].a2 = buff + size + sizeof(A);
printf("v:%f\r\n", ((A*)pB[0].a1)->v); //这句正常
((A*)pB[0].a1)->v = 1; //报hard fault
原因分析:
原来在只有一个 void* a1的时候可以执行,加多一个void* a2的时候出问题,猜测应该是跟结构体对齐有关,但这种没发解决的,后面把所有的 float 改成 short 则正常!!!