赞
踩
构造结构体变量函数
- 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个字节。
更改代码后运行
报错解决
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。