构造结构体变量函数
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;
}
在主函数中构造
struct Person *tom = Person_create("Tom Blank", 18, 172, 73);
释放内存代码
void Person_destroy(struct Person *who){
assert(who != NULL);
free(who->name);
free(who);
}
更改结构体变量tom的name成员
tom->name = "Tom Tom Tom";
使用valgrind执行后内存泄漏报错
第二行说在退出时还有10个字节在使用
更改代码为
free(tom->name);
tom->name = strdup("Tom Tom Tom");
解释:在更改前先释放之前申请的内存,释放后再将name成员指向新的地址
如果直接更改,就丢失了之前的name成员指向的内存地址,即("Tom Blank"),就是第二行
说的那10个字节。
更改代码后运行
报错解决