从C中的联合复制数据

时间:2013-01-13 06:18:01

标签: c pointers

我有一个指向带有联合

的结构的指针

所以我们说我们有

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足以复制联合中的东西。

1 个答案:

答案 0 :(得分:5)

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

x->u = y->u

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

如果需要深层复制,则应为目标分配足够的内存以保存要复制到其中的数据,然后使用memcpy将源联合的内容复制到其中。

好读:
What is the difference between a deep copy and a shallow copy?