【问题标题】:how to allocate space for contained char pointer embedded in parent struct with malloc. I only have access to containing struct pointer如何使用 malloc 为嵌入在父结构中的包含 char 指针分配空间。我只能访问包含结构指针
【发布时间】:2021-11-22 20:40:44
【问题描述】:

我有以下结构

struct connection
{
    int *new_socket;
    int type;
    struct sockaddr_in address;
    char *request_line; 

};

我创建了一个 connection 结构的指针,例如 struct connection *con_obj=malloc(sizeof(struct connection)) 现在我想为

 con_obj->request_line

我可以这样做吗

*(con_obj->request_line)= malloc(sizeof(char )*val);

或者我需要这样做

con_obj->request_line= malloc(sizeof(char )*val);//I don't think so

谁能告诉我这个

【问题讨论】:

  • @kiner_shah 许多 StackOverflow 用户不同意在 C 的情况下“您需要将其转换为适当的类型”,实际上他们建议不要这样做。 stackoverflow.com/questions/605845/…
  • 您需要:con_obj->request_line = malloc(sizeof(char) * val)。你为什么不试试?您的编译器会为您提供有价值的信息。
  • @kiner_shah 你不需要需要强制转换,但是你可以将它强制转换为合适的类型,但是这样的强制转换是没有用的。
  • 在尝试访问con_obj>request_line之前不要忘记检查if (con_obj != NULL)
  • *(con_obj->request_line) 这将访问单个 char 并且您的编译器应该警告“从不同大小的指针转换整数”或类似的。 con_obj->request_line 是一个指针,分配地址是完全有效的。如果第一个版本没有收到警告,则需要提高警告级别。

标签: c pointers malloc


【解决方案1】:

正确的做法是:

con_obj->request_line= malloc(val * sizeof(*con_obj->request_line));

你应该测试指针con_obj是否不是NULL

你的第一个版本:

*(con_obj->request_line)= malloc(sizeof(char )*val);

在取消引用未分配的指针时调用未定义的行为。分配本身也是错误的,因为您将char 值分配给void *。如果您没有忽略编译器警告,您可以自己发现它。 始终阅读编译器警告。永远不要忽视他们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多