【发布时间】:2020-04-01 12:40:12
【问题描述】:
我不知道在我的情况下使用 malloc 的正确顺序。
结构:
typedef struct buffer_char
{
size_t size;
char *p;
} buffer_char;
typedef struct buffer_buffer_char
{
size_t size;
buffer_char *p;
} buffer_buffer_char;
typedef struct LPWA_COMMAND
{
LPWA_COMMAND_TYPE type;
buffer_char text;
buffer_buffer_char writeargs;
buffer_buffer_char readargs;
} LPWA_COMMAND;
typedef struct buffer_LPWA_COMMAND
{
size_t size;
LPWA_COMMAND *p;
} buffer_LPWA_COMMAND;
现在我想在 init(*buffer_LPWA_COMMAND) 中进行 malloc:
buffer_LPWA_COMMAND test;
init(&test);
我知道如何 malloc buffer_buffer_char 就足够了,但我想分享所有代码。
这是正确的吗?:
void buffer_char_init(buffer_char *buf)
{
buf->p = (char*)malloc(sizeof(char));
buf->size = 0;
}
void buffer_buffer_char_init(buffer_buffer_char *buf)
{
buf->p = (buffer_char*)malloc(sizeof(buffer_char));
buffer_char_init(&buf->p[0]);
buf->size = 0;
}
谢谢!
【问题讨论】:
-
不清楚这个结构是如何使用的。只需将所有内容初始化为 0 就足够了,但这实际上取决于其余代码对结构内容所做的假设。
-
@chqrlieforyellowblock 在这种情况下引用每个需要 malloc 的指针,稍后再重新分配。只是简单的附加函数。
-
@PaulOgilvie 它没有给出编译错误。我很确定,&buf->p[0] 与 buffer_char *buf 相同,因为 buf->p[0] 是 buffer_char。这就是这样做的全部原因。它应该代表类似:string[];
-
您是否将
buffer_buffer_char的数组发送给函数void buffer_buffer_char_init(buffer_buffer_char *buf)? -
@hanie 只是一个 buffer_buffer_char 类型的单一结构,如下所示:buffer_buffer_char foo; buffer_buffer_char_init(&foo);