2017-10-16 34 views
-2

沒有錯誤,但我期待10個值,但我只有一個值。以下是我的創建和顯示功能。將不顯示多個值

void create() 
{ 
int random; 
for (int i = 0; i < 10; i++) 
{ 
    struct node *new_node, *current; 
    new_node = new node; 
    random = randomNum(); 
    new_node->data = random; 
    new_node->next = NULL; 
    if (start == NULL) 
    { 
     start = new_node; 
     current = new_node; 
     new_node = NULL; 
    } 
    else 
    { 
     current->next = new_node; 
     current = new_node; 
    } 
} 
} 

void display() 
{ 
struct node *new_node; 
new_node = start; 
while (new_node != NULL) 
{ 
    cout << new_node->data << "->"; 
    new_node = new_node->next; 
} 
} 

我需要改變什麼?

+2

如果開始不爲空,哪裏目前得到初始化? – Steve

+1

_I試圖初始化'電流 - >未來= NULL'_你閱讀警告消息?它在抱怨'真正水流nt'(未初始化),而不是'current-> next'。這種警告的原因是:如果if(start == NULL)中的條件爲false,則執行'else'塊,並且'current-> next = new_node;'由於未初始化指針的解引用而爲UB (你試圖修復'current-> next = NULL'是UB出於同樣的原因)。 –

+0

@When Hang Khoo這是一個確實的錯誤還是一個警告?如果這是一個警告,你可以忽略它。 –

回答

0

嘗試以下行

current = new_node;  
current->next = new_node; 

因爲在你的情況下,有你這樣怎麼可以更新其下沒有current指針的值。首先更新/設置當前,然後更新/設置下一個。

if (start == NULL) 
    { 
     start = new_node; 
     current = new_node; 
     current->next = NULL; 
     new_node = NULL; 
    } 
    else 
    { 
     current = new_node; 
     current->next = new_node; 

    } 
+0

現在沒有錯誤,但是我的輸出不是正確顯示。我需要改變什麼? –

0

與編譯器消息的問題是,編譯器無法確定在else語句中使用的變量current是否被提前初始化。

如果這是一個警告,你可以忽略它。

或者你可以重寫功能通過以下方式

void create() 
{ 
    const int N = 10; 

    node **current = &start; 

    while (*current) current = &(*current)->next; 

    for (int i = 0; i < N; i++) 
    { 
     *current = new node; 
     (*current)->data = randomNum(); 
     (*current)->next = nullptr; 
     current = &(*current)->next; 
    } 
} 

的for循環也可以這樣寫的身體(我假設數據成員data先於節點定義數據成員next。否則交換初始化。

*current = new node { randomNum(), nullptr }; 
current = &(*current)->next;