admin管理员组文章数量:1567046
构造结构体变量函数
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个字节。
更改代码后运行
报错解决
版权声明:本文标题:更改结构体字符串成员的内容时内存泄漏 LEAK SUMMARY:definitely lost: 10 bytes in 1 blocks 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725276931a1016151.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论