如何深复制包含指针的结构?

问题描述 投票:-1回答:1

说我的结构包括:

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错误。我是否可以正确进行深度复制?

谢谢

c
1个回答
2
投票

NOTE:以下假设breed实际上不是问题中当前显示的struct cat类型;相反,它假定一个没有指针的简单结构。


对于深拷贝,您需要替换:

cat2->breed = cat1->breed;

with

memcpy(cat2->breed, cat1->breed, sizeof(*cat2->breed));

您当前的代码只是复制指针,因此所指向的breed对象是相同的,并且您的malloc指针将被丢弃。

© www.soinside.com 2019 - 2024. All rights reserved.