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也就失效了
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也就失效了
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
复习浅拷贝与深拷贝