关于结构体深拷贝和浅拷贝的问题

时间:2022-02-25 19:46:50
查了百度说是前拷贝只靠了指针的地址,没有拷贝内容。但是地址不是内存地址吗?按理来说找到地址就能顺着找到内容啊。我是萌新不太懂,还望大神们指点。

6 个解决方案

#1


你只拿一份地址,如果对象都不存在了,你拿的地址就是野指针了。

#2


类(结构体)有指针成员时,深拷贝时要为被赋值的变量里的指针成员申请空间并进行值拷贝,这样两个变量都是独立的。
浅拷贝时只拷贝指针的值,如果源变量被释放了目的变量里的指针就成野指针了,当然如果你能控制源变量被释放后目的变量不会再用到也可以
可以了解下智能指针

#3


不是找不找得到内容的问题,是想不想做拷贝,或有没有去找到内容做拷贝的问题。

#4


举个例子
typedef struct A{
  int* ddd;
}*PA;
PA sa1,sa2;
。。。。

sa1->ddd=(PA)malloc(sizeof(int));
memcpy(sa1,sa2,sizeof(struct A));这就是浅拷贝。
如果
下一步
free(sa1->ddd);
sa2 的ddd也就失效了

#5


受教了  fighting  关于结构体深拷贝和浅拷贝的问题

#6


复习浅拷贝与深拷贝

#1


你只拿一份地址,如果对象都不存在了,你拿的地址就是野指针了。

#2


类(结构体)有指针成员时,深拷贝时要为被赋值的变量里的指针成员申请空间并进行值拷贝,这样两个变量都是独立的。
浅拷贝时只拷贝指针的值,如果源变量被释放了目的变量里的指针就成野指针了,当然如果你能控制源变量被释放后目的变量不会再用到也可以
可以了解下智能指针

#3


不是找不找得到内容的问题,是想不想做拷贝,或有没有去找到内容做拷贝的问题。

#4


举个例子
typedef struct A{
  int* ddd;
}*PA;
PA sa1,sa2;
。。。。

sa1->ddd=(PA)malloc(sizeof(int));
memcpy(sa1,sa2,sizeof(struct A));这就是浅拷贝。
如果
下一步
free(sa1->ddd);
sa2 的ddd也就失效了

#5


受教了  fighting  关于结构体深拷贝和浅拷贝的问题

#6


复习浅拷贝与深拷贝