2016-03-03 118 views
-3

下面的代碼是我整個程序的一個片段。我定義的唯一的東西是構造函數(head = 0),析構函數和一個函數,用於創建一個包含20個值的鏈表。他們應該是隨機的(我可以處理),但我需要先解決這個seg故障。幫幫我!對於節點爲什麼我會出現分段錯誤?

結構類型是:

struct ListNode 
{ 
    int value; 
    ListNode *next; 
}; 
ListNode *head; 

CODE:

void NumberList::buildSortedList(){ 
    ListNode *newNode; 
    int number = 1;  
    int count = 0;  
    head->value = number;  
    ListNode *p; 
    do{ 
     p = head;  
     while (p->next) { // traverse the list to the end to append new value 
     p = p->next;  
     newNode = new ListNode; 
     newNode->value = number; 
     newNode->next = NULL;  
     p->next = newNode;  
    }   
    }while (count < 19); 
    } 
+1

** - 1 **如果這是所有相關的代碼,那麼您將解除引用那個未初始化的head,一個不確定的值。根據您的想法下調您的想法,足以確定哪些代碼是相關的。你應該總是發佈一個*完整*但最小的例子。 –

+0

所以你在你的ctor中定義了'head = 0',然後你做'head-> value'?不知道會發生什麼問題...... – Nacho

回答

0
while (p->next) { // traverse the list to the end to append new value 
    p = p->next; 

    newNode = new ListNode; 
    newNode->value = number; 
    newNode->next = NULL; 

    p->next = newNode; 

} 

應該是

while (p->next) { // traverse the list to the end to append new value 
    p = p->next; 
    } 

    newNode = new ListNode; 
    newNode->value = number; 
    newNode->next = NULL; 

    p->next = newNode; 
0

如果head是一個全局變量,它被初始化爲NULL 。取消引用NULL是非法的。

您必須先將指向有效緩衝區的指針分配給取消引用它的有效緩衝區。

void NumberList::buildSortedList(){ 

    ListNode *newNode; 

    int number = 1; 

    int count = 0; 

    if (head == NULL) head = new ListNode; // add this line 
    head->value = number; 

    ListNode *p; 

    do{ 
     p = head; 

     while (p->next) { // traverse the list to the end to append new value 
     p = p->next; 
     } // move this in order not to break the list 

     newNode = new ListNode; 
     newNode->value = number; 
     newNode->next = NULL; 

     p->next = newNode; 


    }while (count++ < 19); // add ++ to avoid infinite loop 

} 
相關問題