说我的结构包括:
struct cat
{
char *name;
struct cat *breed;
size_t n_kittens;
};
我相信memcpy会进行浅表复制,因此我一直在尝试实现自己的深表复制:
void deep_copy(struct cat *cat1, struct cat *cat2)
{
cat2->n_kittens = cat1->n_kittens;
cat2->name = strdup(cat1->name);
cat2->breed = (struct cat *)malloc(sizeof(struct cat));
cat2->breed = cat1->breed;
}
我还具有在深度复制之前调用的免费功能
void free(struct cat *cat)
{
free(cat->n_kittens);
free(cat->name);
free(cat->breed);
}
我一直收到信号11错误。我是否可以正确进行深度复制?
谢谢
NOTE:以下假设breed
实际上不是问题中当前显示的struct cat
类型;相反,它假定一个没有指针的简单结构。
对于深拷贝,您需要替换:
cat2->breed = cat1->breed;
with
memcpy(cat2->breed, cat1->breed, sizeof(*cat2->breed));
您当前的代码只是复制指针,因此所指向的breed
对象是相同的,并且您的malloc
指针将被丢弃。