我有一个指向带有联合
的结构的指针所以我们说我们有
struct A {
union {
char **word;
struct A *B
} u;
};
我有变量x和y,类型为A *
typedef A* A_t;
A_t x;
A_t y;
将x-> u = y-> u足以复制联合中的东西。
答案 0 :(得分:5)
如果指针没有指向任何有效的指针,则不能只取消引用指针
为了能够x->u
,您必须确保x
指向某个有效的内存,您显示的代码将取消引用未初始化的指针,这会导致未定义的行为,并且很可能是崩溃。同样适用于y->u
。因此,在取消引用它们之前,请确保x
和y
指向有效内存。
x->u = y->u
不会执行深层复制,而是执行浅层复制 你基本上会得到两个指向同一个内存的指针,这可能不是你想要或需要的。
如果需要深层复制,则应为目标分配足够的内存以保存要复制到其中的数据,然后使用memcpy
将源联合的内容复制到其中。
好读:
What is the difference between a deep copy and a shallow copy?