困惑我很困惑与free()
关于数据结构C.使用由malloc和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;
}
@Mat我做malloc()。我将编辑这个问题来澄清这一点。 – NlightNFotis 2013-03-03 12:02:33
@Mat刚用我的分配方法更新了这个问题。如果您需要更多信息,我可以发布我的整个代码,这是一个相当小的程序,但是从现在开始,为了清晰起见,我不会这么做。 – NlightNFotis 2013-03-03 12:05:31
用于完整测试用例的+1,使用Valgrind等。 – 2013-03-03 12:12:03