我对在C语言中使用free()
释放数据结构感到困惑。
如果我有以下数据结构:
struct Person {
char *name;
int age;
float weight;
float height;
};
我通过malloc()
为结构体分配内存,例如:struct Person *me = malloc(sizeof(struct Person));
在使用完我的结构体后(程序结束之前),我会释放已分配的内存,方法如下:
free(person_pointer->name);
free(person_pointer);
释放
name
指针所指向的内存是必要的,因为如果我只释放 person_pointer
的内存,我只会释放用于存储数据结构及其成员的内存但不会释放结构体成员指针所指向的内存。
然而,使用我的实现,valgrind 似乎表明第一个 free()
是无效的。所以,我的问题归结为:当我通过指针释放结构体占用的内存时,是否应该预先释放成员指针所指向的内存? 编辑:这是我的整个代码:
#include <stdio.h>
#include <stdlib.h>
struct Person {
char *name;
int age;
float weight;
float height;
};
int main(int argc, char **argv)
{
struct Person *me = malloc(sizeof(struct Person));
me->name = "Fotis";
me->age = 20;
me->height = 1.75;
me->weight = 75;
printf("My name is %s and I am %d years old.\n", me->name, me->age);
printf("I am %f meters tall and I weight %f kgs\n", me->height, me->weight);
free(me->name);
free(me);
return 0;
}
me->name
指向一个匿名字符串。 - md5