typedef struct Teacher
{
char name[64];
int age;
char* pname2;//结构体里套用指针
}Teacher;
void copyTeacher(Teacher* to, Teacher* from)
{
//*to = *from;
memcpy(to, from, sizeof(Teacher));//完成一次copy 同理t2释放内存
}
void main()
{
Teacher t1;
Teacher t2;
strcpy(t1.name, "name1");
t1.pname2 = (char*)malloc(100);
strcpy(t1.pname2, "ssss");
//t1 copy t2
copyTeacher(&t2, &t1);
if (t1.pname2 != NULL)
{
free(t1.pname2);
t1.pname2 = NULL;
}
if (t2.pname2 != NULL)
{
free(t2.pname2);//触发断点
t2.pname2 = NULL;
}
}
两个指针变量指向同一个内存空间 编译器的=操作只会copy指针的值不会copy指针指向的内存数据 从from 拷贝到to
typedef struct Teacher
{
char name[64];
int age;
char* pname2;//结构体里套用指针
}Teacher;
void copyTeacher(Teacher* to, Teacher* from)
{
*to = *from;//把指针变量copy过去
//memcpy(to, from, sizeof(Teacher));//完成一次copy 同理t2释放内存
to->pname2 = (char*)malloc(100);//copy数据过去
strcpy(to->pname2, from->pname2);//显示内存空间则可以释放了两次
}
void main()
{
Teacher t1;
Teacher t2;
strcpy(t1.name, "name1");
t1.pname2 = (char*)malloc(100);
strcpy(t1.pname2, "ssss");
//t1 copy t2
copyTeacher(&t2, &t1);
if (t1.pname2 != NULL)
{
free(t1.pname2);
t1.pname2 = NULL;
}
if (t2.pname2 != NULL)
{
free(t2.pname2);//触发断点
t2.pname2 = NULL;
}
}