在C中对结构进行深层复制的最简单方法是什么?

时间:2015-05-06 00:52:01

标签: c struct deep-copy

假设我有一个

struct A{
char *name;
unsigned long *trunks;
bool value;
const struct smap *smap;
...
...
}

这个结构具有所有类型的数据结构,除了struct A A *之外,我没有直接接触结构,它是指向它的指针。

1 个答案:

答案 0 :(得分:1)

您必须以相同的方式(递归地)将结构中的每个元素和所有引用的对象复制到新分配的结构。

如果struct只有很少的指针,你可以使用memcpy先复制所有元素,然后在第二遍中复制所有引用的(通过指针)对象。如果有许多指针,手动复制每个字段可能更有效。

引用的对象必须被视为相同(通过递归,迭代会非常讨厌)。但是,为此,您需要了解这些类型的结构。或者,在其实现文件中可能存在所有这些对象的复制函数,从而使它们保持不透明。如果结构和复制功能都不可用,那么你有点迷失,因为没有它就无法检测指针。

如果存在循环引用,则会出现问题。事情变得更加复杂。