我只是回头看了一段时间的旧代码,看到了这样的内容:
memset(LocRunTimeInfo[LabelId],0x00,sizeof(mpls_RuntimeInfo_t));
应该不是:
memset(LocRunTimeInfo + LabelId,0x00,sizeof(mpls_RuntimeInfo_t));
LocRunTimeInfo的声明如下所示:
static mpls_RuntimeInfo_t *LocRunTimeInfo = NULL;
我在下面详细说明了
mpls_RuntimeInfo_s
的声明:typedef struct mpls_RuntimeInfo_s {
UINT16 u16LabelId;
jpax_egrobstr_t *pEgrObj;
bcm_l3_intf_t l3_intf;
bcm_mpls_vpn_config_t vpn_info;
bcm_gport_t provider_gport;
bcm_gport_t mpls_p_port_id;
UINT8 smac[6];
UINT16 u16ProviderVid;
} mpls_RuntimeInfo_t;
最佳答案
第一个版本(LocRunTimeInfo[LabelId]
)缺少地址运算符:&LocRunTimeInfo[LabelId]
是正确的。否则,它将返回struct mpls_RuntimeInfo_s
,而不是指向它的必需指针。LocRunTimeInfo + LabelId
也是正确的,因为它是正确版本的identical。标准中的文本显示获取条目本身,但是&*(ptr + index)
与(ptr + index)
相同。
注意,LocRunTimeInfo
应该指向足够大的数组;初始化后具有的空指针会导致未定义的行为。
关于c - 这怎么编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31551658/