【问题标题】:Struct inside union inside struct in cc中的结构内的联合内的结构
【发布时间】:2014-05-04 21:14:28
【问题描述】:

你好,可以说我有这个代码

typedef struct entry {
    union {
        struct A {
            char  *c;
        } *A;
        struct B {
            char *c;
        } *B;
    } value;
} *TableEntry;

我正在为 entry 做一个 malloc,现在我想将一个字符串从 struct A 复制到 c 。我是否必须为结构 A 分配内存,然后为 c 或表条目的第一个 malloc 分配给所有这些内存?提前谢谢你

【问题讨论】:

  • @Malloc:这怎么不是 C++?
  • 它不是 C++。你可以说 C 是 C++ 的一个子集,那你就错了。
  • @littleadv:它是有效的 C++,所以请给出一个 的理由来删除标签。
  • @Deduplicator 正如我所说 - 你可以争辩说你会错的。一个很好的理由:OP 说它的 C.
  • @littleadv:在哪里?看不到这样的说法。

标签: c struct malloc unions


【解决方案1】:

你必须为他们两个分配内存

【讨论】:

    【解决方案2】:

    当您分配TableEntry - 您为整个联合分配内存。其中的指针已分配,但它们指向的 - 不是。因此,您应该将分配给结构体的c 成员和联合体的A/B 成员的值分配给。

    注意AB 共享同一个空间。

    【讨论】:

    • 所以我们有一个用于整个结构的 malloc,然后只用于 c 对吗?
    • @user3187860 是的。而且你只分配一个结构,A 或 B - 你不能同时拥有。
    【解决方案3】:

    为了澄清,需要三个分配,例如:

    TableEntry *t = malloc(sizeof *t);
    t->A = malloc(sizeof *t->A);
    t->A->c = malloc(50);
    

    不过,这种设计是有问题的,因为无法判断 AB 中哪个当前处于活动状态。您将必须有另一个索引或其他东西来跟踪此条目是A 还是B

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多