7

我有一个指向带有联合的结构的指针

所以假设我们有

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 是否足以复制联合中的内容。

4

1 回答 1

5

如果指针没有指向任何有效的东西,你就不能只取消引用它们。
为了能够做到这一点,x->u您必须确保x指向一些有效的内存,您显示的代码取消引用未初始化的指针,这会导致未定义的行为并且很可能会导致崩溃。同样适用于y->u。因此,在取消引用它们之前,请确保xy指向有效的内存。

x->u = y->u

不会执行深拷贝,而是执行浅拷贝
您基本上会得到两个指向同一内存的指针,这可能不是您想要或需要的。

如果你需要一个深拷贝,你应该为你的目标分配足够的内存来保存被复制到它的数据,然后memcpy用来将源联合的内容复制到它。

好读:
深拷贝和浅拷贝有什么区别?

于 2013-01-13T06:19:54.577 回答