我有一个指向带有联合的结构的指针
所以假设我们有
struct A {
union {
char **word;
struct A *B
} u;
};
我有 A* 类型的变量 x 和 y
typedef A* A_t;
A_t x;
A_t y;
x->u = y->u 是否足以复制联合中的内容。
如果指针没有指向任何有效的东西,你就不能只取消引用它们。
为了能够做到这一点,x->u
您必须确保x
指向一些有效的内存,您显示的代码取消引用未初始化的指针,这会导致未定义的行为并且很可能会导致崩溃。同样适用于y->u
。因此,在取消引用它们之前,请确保x
并y
指向有效的内存。
x->u = y->u
不会执行深拷贝,而是执行浅拷贝。
您基本上会得到两个指向同一内存的指针,这可能不是您想要或需要的。
如果你需要一个深拷贝,你应该为你的目标分配足够的内存来保存被复制到它的数据,然后memcpy
用来将源联合的内容复制到它。
好读:
深拷贝和浅拷贝有什么区别?