c中结构内部的并集内部的结构

c中结构内部的并集内部的结构,c,struct,malloc,unions,C,Struct,Malloc,Unions,你好,假设我有这个代码 typedef struct entry { union { struct A { char *c; } *A; struct B { char *c; } *B; } value; } *TableEntry; 我正在为entry执行malloc,现在我想将一个字符串从结构a复制到c。我必须先为结构A分配内存,然后再为c分配内存,还是表条目

你好,假设我有这个代码

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

我正在为entry执行malloc,现在我想将一个字符串从结构a复制到c。我必须先为结构A分配内存,然后再为c分配内存,还是表条目的第一个malloc必须为它们分配内存?提前谢谢你

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

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

当你分配
表格条目时
你为整个联合分配内存。其中的指针是分配的,但它们指向的不是。因此,您应该分配分配给结构的
c
成员和联合的
A
/
B
成员的值


请注意,
A
B
共享相同的空间。

分配
表格条目时,即为整个联合分配内存。其中的指针是分配的,但它们指向的不是。因此,您应该分配分配给结构的
c
成员和联合的
A
/
B
成员的值


请注意,
A
B
共享相同的空间。

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

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

但是,这种设计是有问题的,因为没有办法判断当前在
A
B
中哪个是活动的。您必须有另一个索引或其他东西来跟踪此条目是
A
还是
B

要澄清,需要三个alloc,例如:

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

但是,这种设计是有问题的,因为没有办法判断当前在
A
B
中哪个是活动的。你必须有另一个索引或其他东西来跟踪这个条目是
A
还是
B

,所以我们对整个结构有一个malloc,然后只有c是这样吗?@user3187860是的。你只分配一个结构,A或B-你不能两者都有。所以我们对整个结构有一个malloc,然后只分配c是吗?@user3187860是的。你只分配一个结构,或者A或B——你不能同时拥有这两个。@ Malloc:这不是C++吗?它不是C++。你可以说C是C++的子集,你可能错了。@利特尔ADV:它是有效的C++,所以给出一个删除标签的好理由。一个很好的理由:OP说它的C@LittledV:在哪里?不要这样说。@ Malloc:这不是C++吗?不是C++。你可以说C是C++的子集,你可能错了。@利特尔ADV:它是有效的C++,所以给出一个删除标签的好理由。一个很好的理由:OP说它的C@LittledV:在哪里?我看不出这样的说法。