链接列表无法正常工作

这是一个基本链接列表,添加节点然后打印它们但由于某种原因它无法正常工作。 根据我的测试,它在打印列表后失败,它打印工资,错误地打印数字,然后终止。

#include #include #include typedef struct node_s { char job_title[25]; double hourly_wage; struct node_s *next; } node_t; void print_list(node_t *list); void add_node(node_t **head, char *title, double hwage); int main() { node_t *list; list = NULL; add_node(&list, "Programmer", 32.35); print_list(list); add_node(&list, "Analyst", 25.80); print_list(list); add_node(&list, "Technician", 17.50); print_list(list); add_node(&list, "Clerk", 12.00); print_list(list); add_node(&list, "Manager", 53.58); print_list(list); return(0); } void print_list(node_t *list){ node_t *current; if (current == NULL) { printf("\n"); }else{ printf("The job is called:%s\n", current->job_title); printf("The job pays %d hourly.\n", current->hourly_wage); print_list(current->next); } } void add_node(node_t **head, char *title, double hwage){ node_t *current = head; node_t *newNode = (node_t *) malloc(sizeof(node_t)); if (newNode == NULL) { printf("malloc failed\n"); exit(-1); } strcpy(newNode->job_title, title); newNode->hourly_wage = hwage; newNode->next = NULL; while (current->next) { current = current->next; } current->next = newNode; } 

在以下部分代码中:

 void print_list(node_t *list){ node_t *current; if (current == NULL) { 

您正在将当前指针的未初始化值与null进行比较。 我想你忘了给它赋值:

 current = list; 

之前如果指示。

更改以下列方式运行

 void print_list( node_t *list ) { if ( list == NULL ) { printf( "\n" ); } else { printf("The job is called:%s\n", list->job_title); printf("The job pays %f hourly.\n", list->hourly_wage ); print_list( list->next ); } } void add_node( node_t **head, const char *title, double hwage ) { node_t *newNode = ( node_t * )malloc( sizeof( node_t ) ); if ( newNode == NULL ) { printf( "malloc failed\n" ); exit( -1 ); } strncpy( newNode->job_title, title, 25 ); newNode->job_title[24] = '\0'; newNode->hourly_wage = hwage; newNode->next = NULL; while ( *head ) { head = &( *head )->next; } *head = newNode; } 

这是一个示范计划

 #include  #include  #include  typedef struct node_s { char job_title[25]; double hourly_wage; struct node_s *next; } node_t; void print_list( node_t *list ) { if ( list == NULL ) { printf( "\n" ); } else { printf("The job is called:%s\n", list->job_title); printf("The job pays %f hourly.\n", list->hourly_wage ); print_list( list->next ); } } void add_node( node_t **head, const char *title, double hwage ) { node_t *newNode = ( node_t * )malloc( sizeof( node_t ) ); if ( newNode == NULL ) { printf( "malloc failed\n" ); exit( -1 ); } strncpy( newNode->job_title, title, 25 ); newNode->job_title[24] = '\0'; newNode->hourly_wage = hwage; newNode->next = NULL; while ( *head ) { head = &( *head )->next; } *head = newNode; } int main(void) { node_t *list; list = NULL; add_node(&list, "Programmer", 32.35); print_list(list); add_node(&list, "Analyst", 25.80); print_list(list); add_node(&list, "Technician", 17.50); print_list(list); add_node(&list, "Clerk", 12.00); print_list(list); add_node(&list, "Manager", 53.58); print_list(list); return 0; } 

输出是

 The job is called:Programmer The job pays 32.350000 hourly. The job is called:Programmer The job pays 32.350000 hourly. The job is called:Analyst The job pays 25.800000 hourly. The job is called:Programmer The job pays 32.350000 hourly. The job is called:Analyst The job pays 25.800000 hourly. The job is called:Technician The job pays 17.500000 hourly. The job is called:Programmer The job pays 32.350000 hourly. The job is called:Analyst The job pays 25.800000 hourly. The job is called:Technician The job pays 17.500000 hourly. The job is called:Clerk The job pays 12.000000 hourly. The job is called:Programmer The job pays 32.350000 hourly. The job is called:Analyst The job pays 25.800000 hourly. The job is called:Technician The job pays 17.500000 hourly. The job is called:Clerk The job pays 12.000000 hourly. The job is called:Manager The job pays 53.580000 hourly. 

您只需要编写将删除列表中所有已分配内存的函数。