Error Traverse List of LinkedList in C
我编写了以下代码,但是当我尝试编译代码时,编译器显示以下错误。我的错在哪里?
编译器错误:
main.c:32:39: error: dereferencing pointer to incomplete type a€?struct Informationa€?
printf("Information : %d\
", ptr->_number);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <stdio.h> #include <stdlib.h> typedef struct Informaion{ int _number; struct Informaion *next; } Information; int main(int argc, char const *argv[]){ Information *temp; Information *head; temp = malloc(sizeof(Information)); temp->_number = 20; head = temp; temp = malloc(sizeof(Information)); temp->_number = 21; head->next = temp; temp = malloc(sizeof(Information)); temp->_number = 22; head->next->next = temp; temp = malloc(sizeof(Information)); temp->_number = 23; head->next->next->next = NULL; struct Information *ptr = head; while(ptr != NULL) { printf("Information : %d\ ", ptr->_number); ptr = ptr->next; } free(head); free(temp); return 0; } |
你的类型的名字是
的行中
1 | struct Information *ptr = head; |
为了解决这个问题,你可以修正错字,或者你可以直接通过 typedef 使用它。
1 | Information *ptr = head; |
作为一般惯例,您不应使用以下划线开头的变量或任何标识符。这些是为编译器保留的。建议你把
结构定义有错别字
1 2 3 4 5 | typedef struct Informaion{ ^^^ int _number; struct Informaion *next; } Information; |
所以要么在声明中的任何地方使用类型说明符
此代码片段
1 2 3 |
没有意义。其地址存储在指针 temp 中的已分配对象未添加到列表中。
应该写成
1 2 3 4 | temp = malloc(sizeof(Information)); temp->_number = 23; head->next->next->next = temp; head->next->next->next->next = NULL; |
要释放分配的节点,你应该写
1 2 3 4 |
换行:
1 | struct Information *ptr = head; |
到:
1 | struct Informaion *ptr = head; //no t |
或 :
1 | Information *ptr = head; |
并且错误将消失。您可以定义的类型可以使用
请注意,不鼓励使用以下划线开头的变量(例如您的