2010-05-14 61 views
6

可以說我有以下幾點:這個指針初始化是否必要?

CHARLINK * _init_link(CHARLINK **link) 
{ 
    short i; 
    (*link)->cl = (CHARLINK **) calloc(NUM_CHARS, sizeof(CHARLINK *)); 
    for (i = 0; i < NUM_CHARS; i++) 
     (*link)->cl[i] = NULL; 
    return (*link); 
} 

是環路初始化每個元素爲NULL必要或者他們自動釋放calloc NULL?

回答

13

是的,在循環中賦值爲NULL是必需的。 calloc初始化爲所有位0.但空指針可能不會像那樣表示。它依賴於實現。因此分配是必要的。

3

不,calloc將其緩衝區初始化爲0。

+0

具體而言,它初始化爲「所有位0」,這可能不是'NULL'(或0'float'值或者,對於這個問題)。 – 2010-05-14 20:24:42

7

這取決於你的系統,但在絕大多數情況下,這沒關係。 calloc()會返回一個填充零的緩衝區。但是,您計算機上的空指針可能不是0的位模式。在空指針非零的機器上,您可能會遇到麻煩。

+2

依靠通常有效但不能保證工作的行爲是一個壞主意。即使你永遠不會遇到它,離開循環並僅僅將'calloc()'改變爲'malloc()'也不會更容易,所以沒有人會試圖去掉循環並破壞代碼在那些奇特的平臺之一上? – 2010-05-14 20:35:13

+0

+1 @Chris,我就是這麼做的。 – 2010-05-14 21:04:53

+0

正確,正確 – Mandrake 2010-05-14 22:53:04