不知道为什么,我的代码运行提示段错误。
#include
#include
#include
#include
typedef struct _Person {
const char *name;
int age ;
struct _Person* (*Person_Copy)(struct _Person* p) ;
}Person ;
struct _Person* Person_Copy(struct _Person * pData)
{
struct _Person* p = (struct _Person*)malloc(sizeof(struct _Person));
assert(NULL != p);
memmove(p, pData, sizeof(struct _Person));
return p;
};
struct _Person* mclone(struct _Person* pData){
return pData->Person_Copy(pData) ;
}
int main(){
const char *mname = "zhangsan" ;
Person p1 = {
.name = mname ,
.age = 18,
} ;
printf("name of p1 is %s, age is %d\n" , p1.name , p1.age) ;
Person* p2 = mclone(&p1) ;
printf("name of p2 is %s, age is %d\n" , p2->name , p2->age) ;
//不知道为什么,没有输出
//改为Person* p2 = Person_Copy(&p1) 就正常
free(p2) ;
return 0 ;
}
更新:2014年12月27日21:08:06
int main(){
const char *mname = "zhangsan" ;
Person p1 = {
.name = mname ,
.age = 18,
.Person_Copy = Person_Copy,
} ;
printf("name of p1 is %s, age is %d\n" , p1.name , p1.age) ;
Person* p2 = mclone(&p1) ;
printf("name of p2 is %s, age is %d\n" , p2->name , p2->age) ;
free(p2) ;
return 0 ;
}
参考:
1.http://blog.csdn.net/feixiaoxing/article/details/7075316