2011-10-29 114 views
2

結構的字符串成員,我有一個結構如下:免費用C

struct something{ 
    char *string_member; 

}; 

現在我創建

struct something *s = malloc(sizeof(struct something)); 

s.string_member = malloc(5); //one way 
s.string_member = "some thing wrong"; // second way 

雖然我釋放由s指向的內存。如何在兩種情況下釋放分配給string_member的內存。第二種情況下,我是否必須擔心string_member?

回答

3

你不能在你的second way例子中解放它,而且你無法(可移植地)通過查看指針來區分情況1和情況2。所以不要那樣做,確保你總是使用malloc或者例如string_member來分配。 strdup。這樣,你可以永遠free它(一次)。

s.string_member = strdup("some thing wrong"); // the other way 

... 

free(s.string_member); 
1

在第一種情況下,請致電free(s.string_member)。在第二種情況下,你不必做任何事情。這是因爲字符串不是動態分配的。程序加載時確定駐留的位置,系統也會對其進行清理。