我对free()
C 中关于数据结构的用法感到困惑。
如果我有以下数据结构:
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;
}