2013-01-20 28 views
0

假設我有一個包含一個大結構的全局變量:解放出來全局變量

typedef struct { 
    char Big[1024] 
} LARGE; 

static LARGE x; 

void main() 
{ 
    free(x); 
} 

我可以安全地調用free(x)的主營當我不需要它了嗎?

+0

C沒有全局變量。我相信你指的是具有靜態存儲持續時間的變量。 – Sebivor

回答

7

不,你沒有動態分配x所以不需要(也不能)釋放它。

如果你絕對需要你的程序退出前釋放內存,聲明指針作爲全球性的,它分配的需求,使用malloccalloc,然後free它,當你與結構完成。

static LARGE* x; 

void main() 
{ 
    x = malloc(sizeof(*x)); 
    // use x 
    free(x); 
} 
+0

謝謝。我看到你調用sizeof(* x)而不是sizeof(LARGE),就像以前一樣。兩者有什麼區別? – Muis

+2

這兩個是相同的。我只是更喜歡'sizeof(* x)',因爲在重構代碼並改變'x'類型時,它肯定會保持正確。 – simonc

+0

sizeof不是一個被調用的函數,而是一個當它是表達式的一部分時被評估的運算符。在這種情況下,sizeof * x == sizeof(* x)。 – Sebivor

4

沒有,free只能用於刪除已通過對malloc呼叫分配的對象。

靜態存儲持續時間的對象只能在程序退出時解除分配。