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:在哪里?我看不出这样的说法。