gpt4 book ai didi

c - 如何为此结构分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:48 25 4
gpt4 key购买 nike

typedef struct testMsg_ {
unsigned char opCode;
unsigned int Count;
char *macsStrList[MAC_ADDR_STR_LEN];
} testMsg_t;

macsStrList 中的元素个数为 m_Count。

我知道以下是不正确的:

testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) );

最佳答案

考虑到您所做的结构,这是正确的

testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) );

但是您可能对 *arr[dimension] 的含义感到困惑——它是指向字符的指针的数组长度维度——从字里行间看,

MAC_ADDR_STR_LEN

可能是 mac 地址的字符串表示的长度(比如 <20 字节?)

但是你的结构给了你 20 个字符指针,字符指针仍然需要初始化以指向有效内存。

testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) );
pInput->macsStrList[0] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
pInput->macsStrList[1] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
pInput->macsStrList[2] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
...

或将您的结构重新定义为

typedef struct testMsg_ {
unsigned char opCode;
unsigned int Count;
char macsStrList[NUMBER_OF_MAC_ADDRESSES][MAC_ADDR_STR_LEN];
} testMsg_t;

避免必须处理多个分配。

添加

根据评论,鉴于 mac 地址的数量是动态确定的,您还可以将结构定义为;

typedef struct testMsg_ {
unsigned char opCode;
unsigned int Count;
char macsStrList[1][MAC_ADDR_STR_LEN];
} testMsg_t;

然后分配它使用

testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) + (countOfMacsAddresses * MAC_ADDR_STR_LEN) );

这将添加一个带有指针的解决方案,如果您也需要这样做,您可以使用 realloc 来动态调整数组的大小......

关于c - 如何为此结构分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com