自学内容网 自学内容网

c语言字节未对齐内存访问越界

#define FM_TerMinal_Energy (FM_START)

#define FM_TerMinal_Energy_Len sizeof(stEnergy)

#define FM_STEP (FM_TerMinal_Energy+FM_TerMinal_Energy_Len+4)


#define FM_TerMinal_Demand (FM_STEP*2)

#define FM_TerMinal_Demand_Len sizeof(stDemand)


#define FM_TerMinal_ER(i) (FM_TerMinal_Demand+FM_TerMinal_Demand_Len+2+(sizeof(stEventRecord)+2)*i)

在32位操作系统中由于FM_TerMinal_ER中其中单个stEventRecord与前后两个不通的stEventRecord组成4字节。此时访问会内存越界。

#define FM_TerMinal_Energy (FM_START)

#define FM_TerMinal_Energy_Len sizeof(stEnergy)

#define FM_STEP (FM_TerMinal_Energy+FM_TerMinal_Energy_Len+4)


#define FM_TerMinal_Demand (FM_STEP*2)

#define FM_TerMinal_Demand_Len sizeof(stDemand)


#define FM_TerMinal_ER(i) (FM_TerMinal_Demand+FM_TerMinal_Demand_Len+4+(sizeof(stEventRecord)+4)*i)

只需在上述基础上略加改动,使得单个结构体stEventRecord自己填充完4个字节。


原文地址:https://blog.csdn.net/acuteeagle01/article/details/142250797

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!