跑调的毕加索
发布于

结构体数组访问冲突问题

结构体里的数据会
#define ELEVATOR_EMERG_CONTACT (gElevatorData.stEmergContact)
typedef struct __tagEmergContact
{
CHAR cContactName[EMERGNAME_MAXNUM + 1]; // contact name
CHAR cContactNum[EMERGNUM_MAXNUM + 1]; // contact number
} EmergContact;

typedef struct __tagElevatorData
{
EmergContact stEmergContact[EMERGITEM_MAXNUM];
} ElevatorData;
如果访问这个结构体数组(ELEVATOR_EMERG_CONTACT )没有写下标,编译器会报错也可能不报错,不报错的情况下,会默认访问数组首地址。但是这样写是有逻辑错误的,数据会保存错误,还有一点就是,可能会导致该结构体里的其它结构体数组被数据覆盖或冲突,表现为某个数组数据 为空;因为从逻辑上讲结构体数组地址是连续的,不写下标访问可能会导致结构体数组地址混乱,从而导致其它结构体数组数据为空。

浏览 (127) 点赞 收藏 分享
评论