我想不出我的问题的正确标题,所以就这样吧。我正在尝试学习 C,以下代码来自我正在关注的教程。
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight){
struct Person *who = malloc(sizeof(struct Person));
assert(who != NULL);
who->name = strdup(name);
who->age = age;
who->height = height;
who->weight = weight;
return who;
}
void Person_destroy(struct Person *who){
assert(who != NULL);
free(who->name);
free(who);
}
int main(int argc, char *argv[]){
struct Person *joe = Person_create("Joe Alex", 32, 64, 140);
........
我的问题是Person_create
功能为什么我们要复制name
到新的内存位置who->name
。为什么我们不能只who->name
指出*name
提供给函数的相同位置。
此外,如果我们直接分配了*name
to who->name
do 的地址,我们必须将其释放到Person_destroy
.