gpt4 book ai didi

C语言: memory allocation of a structure of two char* pointers

转载 作者:行者123 更新时间:2023-11-30 16:31:23 25 4
gpt4 key购买 nike

我需要分配一个包含两个指向 char 的指针的结构,如下所示:

typedef struct message_s {
char* message;
char* sender_id;
} message_t;

“message”将是一个指向 246 字节 char[] 的指针;

“sender_id”将是指向 3 个字节的 char[] 的指针;

为 message_t 类型分配内存的正确方法是什么?到目前为止,我的解决方案如下,但看起来不起作用。

message_t* msg = NULL;
char* a_message = (char*)malloc((size_t)246);
a_message = /*read the string somewhere*/
char* id = (char*)malloc((size_t)3);
id = /*read the string somewhere*/
msg->message = a_message;
msg->sender_id = id;

这会导致段错误。我需要为 message_t 分配内存吗?怎么办?

最佳答案

您的伪代码存在内存泄漏,例如

char* a_message = (char*)malloc((size_t)246);
a_message = /*read the string somewhere*/

这会覆盖指针a_message,因此它不再指向上一行中malloc()保留的内存。因此你永远不能free()这个内存。

从您的问题中显示的所有内容来看,根本没有理由使用指针。您可以像这样声明您的结构:

typedef struct message
{
char message[246];
char sender_id[3];
} message;

并将其作为一个整体进行分配,如下所示:

message *msg = malloc(sizeof *msg);

在使用它之前,请检查 msg 是否为 NULLmalloc() 可能会失败...

<小时/>

使用指针,您必须分配三个单独的 block :

typedef struct message
{
char *message;
char *sender_id;
} message;

// ...

// no error checking here for brevity, add the checks yourself:
message *msg = malloc(sizeof *msg);
msg->message = malloc(246);
msg->sender_id = malloc(3);

关于C语言: memory allocation of a structure of two char* pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50640345/

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