2016-03-31 8 views
-3

"may be used uninitialized in this function" for: current->next = temp; alıyorum, saatlerce baktım ama herhangi bir çözüm bulamadım.tekil bağlantı listesi c - bu işlevde başlatılmamış kullanılabilir (-Wall -Werror)

#include <stdio.h> 
#include <stdlib.h> 

struct node{ 
    int data; 
    struct node *next; 
}*head = NULL; 

void add_list(int value){ 
    struct node *temp, *current; 
    temp = (struct node *) malloc(sizeof(struct node)); 
    temp->data = value; 
    temp->next = NULL; 
    if(head == NULL){ 
      head = temp; 
      current = temp; 
    } 
    else{ 
     current->next = temp; 
     current = temp;  
    } 
} 

int main(void){ 
     for(int i = 0; i < 10; i++){ 
      add_list(i); 
     } 
     return EXIT_SUCCESS; 
} 
+3

Nerede 'current' ayarlarım? Ve bütün mesajı oku. Aslında çok açık. – Olaf

+0

Şu anki haliyle * temp .... i ayarlıyorum. "Neden çok açık olacağını" anlayamıyorum çünkü asla {} curren = temp 'ı başlatmadan {} başka birimde olmayacağım! – TheLastStone

+0

'Saatlerce baktım ama hiçbir çözüm bulamadım' - bunu neden yaptın? Hata ayıklayıcınız bozuldu mu? –

cevap

0

head != NULL varsayalım, listeye ilk öğe ekledikten sonra gerçek olacak:

Bu

kodudur. Ardından, fonksiyondur:

void add_list(int value){ 
    struct node *temp, *current; 
    temp = (struct node *) malloc(sizeof(struct node)); 
    temp->data = value; 
    temp->next = NULL; 

     current->next = temp; // current is uninitialized 
     current = temp;  
} 

FWIW, Size işlevini kolaylaştırabilirsiniz:

void add_list(int value){ 
    struct node *temp = malloc(sizeof(struct node)); 
    temp->data = value; 
    temp->next = head; 
    head = temp; 
}