如何初始化多维结构数组的内存区域?

时间:2015-09-18 22:35:02

标签: memory initialization memset

我有一个结构声明如下:

typedef struct jpax_egrobstr_s {
    bcm_if_t egr_obj;
    INT32 label;
}jpax_egrobstr_t;

#define     L2_NUM_WAN_PORTS            6
#define     L2_NUM_BYP_PORTS            2
#define     LABEL_T_CNT                 4096

的定义如

static jpax_egrobstr_t SW_Egrobj[(L2_NUM_WAN_PORTS + L2_NUM_BYP_PORTS)][LABEL_T_CNT];

现在我需要将所有这些区域初始化为-1,所以我选择这样做来启动它:

#define     MEM_DEFAULT     0xFFFFFFFF
memset(SW_Egrobj, MEM_DEFAULT,
        (L2_NUM_WAN_PORTS + L2_NUM_BYP_PORTS) * LABEL_T_CNT);

但事实证明,它似乎并没有真正发挥作用,我仍然在位置[6] [0]找到一个0x00。为什么是这样?结构数组的内存是否不连续 CPU: PowerPC

1 个答案:

答案 0 :(得分:1)

您正在使用该调用设置内存的(L2_NUM_WAN_PORTS + L2_NUM_BYP_PORTS) * LABEL_T_CNT 字节。但结构不是一个字节长。

乘以sizeof(jpax_egrobstr_t)以获取要传递给memset的总字节数。