2015-01-04 46 views
0

如果我有作爲列出了頭,雙指針

typedef Struct b { 
int b; 
Struct b *next; 
}B; 

typedef Struct a { 
int a; 
Struct a *next; 
B *link; 
}A; 

,如果我制定以下這個方案的數據結構.. enter image description here

我使用雙指針頭名單列表B用於跟蹤A節點之間的所有B節點。 因此,如果我使用realloc向指針提供更多數據,我不會丟失頭部內的先前分配的數據,對嗎?

for(i=0;i<n_of_B_lists;i++) 
    *head_b[i]=realloc(*head_b[i],sizeof(B *)*1); //1 is for 1 pointer to the new B list 
+2

[請注意您的運營商優先權](http://en.cppreference.com/w/c/language/operator_precedence) – WhozCraig

+0

@WhozCraig我認爲我使用了與您使用的相同的詞語,但未看到您的評論,當你評論它不在我的回答中時,當我寫一個更好地使用'realloc'的例子時,我注意到OP可能不知道'(* head_b)[i]'和' *(head_b [I])'。 –

+0

在使用鏈表的代碼中使用'[]'看起來很奇怪。 – chux

回答

1

是的,這就是realloc正是因爲,雖然我會建議使用它以不同的方式,只是

void *temp; 

temp = realloc(*head_b[i], sizeof(B *)); 
if (temp == NULL) 
    doSomethingReallocFailed(); 
*head_b[i] = temp; 

也小心在*head_b[i]表達式運算符優先級。