困惑我很困惑與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