2016-01-26 44 views
0

我正在嘗試創建一個鏈接列表。所以,我聲明如下一個LL數據結構:檢查結構是否已被初始化或分配了一些內存

typedef struct linkedList 
{ 
    char* word; 
    struct linkedList* next; 
} linkedList; 

現在,我宣佈表示LL的頭一個全局變量爲linkedList* head = NULL;

現在,我很驚訝,雖然我分配一個NULL值指針我能夠進入下面的while循環。

linkedList* node = head; 
while(node != NULL); 
{ 
    //Why I am here when I have not yet malloc'ed head and through global variable initialization my head is NULL 
} 

正因爲如此,我感覺就像我沒有辦法來檢查,如果我的鏈表head已被初始化或分配一些內存呢。我無法檢查node->next,因爲它會導致分段錯誤錯誤,並且node == NULL正在通過!

請注意是:

  1. 問題是嚴格的C語言
  2. 我不希望有其他的一些全局變量來跟蹤我的鏈表head是否已初始化或分配一些內存但。我想用我的鏈表數據結構來做到這一點。這是因爲假設我運送我的數據結構,並希望如果有人試圖刪除某些東西和鏈接列表然後清空,那麼應該打印/拋出一些意思完整的錯誤。

任何想法請。

+5

在'while'行末尾有一個分號,所以它實際上什麼都不做。然後括號在whle之外形成一個獨立的塊。 – jamieguinan

回答

7

這是因爲這一點:

while(node != NULL); 

刪除分號;。否則,在編譯時,不知道{...}之間的塊是否在該時段之後,並且將輸入它,而不管while (...)中的驗證如何。

+4

編譯時打開'-Wall'。然後你會得到一個像「while循環有空的身體」的警告。 – Schwern

+0

感謝隊友,愚蠢的錯誤,我剛剛計算出來,並提出刪除問題,但你已經擊中了公牛的眼睛。現在我不是在刪除這個問題,而是等待8分鐘,以便我可以接受你的答案。 – hagrawal

+0

@hagrawal是的,它總是讓你有點小事。發生在每個人:) – AntonH

相關問題