2017-09-04 127 views
1

我有以下代碼:警告的指針賦值

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

typedef struct node { 
    int data; 
    struct Node* next; 
} Node; 

typedef struct link_list { 
    Node* HEAD; 
} LinkList; 

void kill(const char* message) { 
    printf("ERROR: %s\n", message); 
    exit(-1); 
} 

LinkList* createList() { 
    LinkList* list = malloc(sizeof(LinkList)); 
    list->HEAD = NULL; 
    return list; 
} 

Node* createNode() { 
    Node* node = malloc(sizeof(Node)); 
    node->next = NULL; 
    node->data = 0; 
    return node; 
} 

void insert(LinkList* list, int data) { 
    if(list == NULL) 
     kill("Cannot insert. The given list is NULL."); 

    Node* node = createNode(); 
    node->data = data; 

    if(list->HEAD == NULL) { 
     list->HEAD = node; 
     return; 
    } 

    Node* it = list->HEAD; 
    while(it->next != NULL) { 
     it = it->next; 
    } 

    it->next = node; 
} 

void display(LinkList* list) { 
    if(list == NULL) 
     kill("The given link list has not been initialized."); 

    Node* it = list->HEAD; 

    if(list->HEAD == NULL) 
     kill("The given link list is empty."); 

    while(1 == 1) {  
     printf("%d ", it->data); 
     it = it->next; 
     if(it == NULL) 
      break; 
    } 

    printf("\n"); 
} 

void main() { 
    int numbers; 
    int data; 

    LinkList* list = createList(); 

    printf("How many numbers?\n"); 
    scanf("%d", &numbers); 

    for (int i = 0; i < numbers; ++i) 
    { 
     printf("Insert data of element %d: ", i + 1); 
     scanf("%d", &data); 

     insert(list, data); 
    } 

    display(list); 
} 

而且我得到以下警告:

Screenshot of Terminal

從我的理解,似乎有與分配問題價值指針。但就我看來,LHS和RHS類型似乎是一樣的! (Node*)

是否與next定義爲struct Node* next這一事實有關並且我將它分配給的值是Node*

+3

使用'結構節點*未來;','不是結構節點*未來;'你的'結構node' – Retr0id

+2

定義有完全相同的問題幾天前....相同的錯誤,相同的命名... – alk

+1

您可以從您的控制檯複製和粘貼文本。 – molbdnilo

回答

3

變化

typedef struct node { 
    int data; 
    struct Node* next; 
} Node; 

typedef struct node { 
    int data; 
    struct node* next; 
} Node; 
3

類型Node是未知的,直到Node定義的末尾:

typedef struct node { 
    int data; 
    struct Node* next; 
} Node; 

更改爲:

typedef struct node { 
    int data; 
    struct node* next; 
} Node; 
0

這將做工精細,

typedef struct node { 
    int data; 
    struct node* next; 
} Node;