我试图打印我的列表超过3次..
应该是
A: 5 B: 2 C: 3
A: 6 B: 4 C: 1
A: 7 B: 3 C: 15
A: 5 B: 2 C: 3
A: 6 B: 4 C: 1
但是在第3次之后,它崩溃了..
请查看我的代码并告诉我如何修复它。
PS:此外,我可以在第二次/第三次运行中编辑列表的值吗?
提前致谢,
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
struct list {
int a,b,c;
struct list *next;
};
struct list *init_list ( int a, int b, int c );
void list_print( struct list *list );
struct list *init_list ( int a, int b, int c ){
struct list *list;
list = malloc(sizeof(struct list));
if (list == NULL) {
printf("Error: Memory allocation failure.\nTerminating.\n");
exit(1);
}
list->a = a;
list->b = b;
list->c = c;
list->next = NULL;
return (list);
}
void list_print(struct list *list) {
int j = 0;
struct list *list2;
do {
list2 = list;
struct list *tmp;
tmp = list;
printf("A: %d B: %d C: %d\n" ,tmp->a, tmp->b, tmp->c);
list = list->next;
j++;
} while (j < 4);
}
int main (int argc, const char * argv[])
{
struct list *linked_list_1, *linked_list_2;
linked_list_1 = init_list(5, 2, 3);
linked_list_1->next = init_list(6, 4, 1); linked_list_2 = linked_list_1->next;
linked_list_2->next = init_list(7, 3, 15);
list_print(linked_list_1);
return 0;
}
答案 0 :(得分:0)
根据我的理解,你有list1-&gt; list2-&gt; list3-&gt; NULL。 所以当j = 0时,你打印list1,然后移动到list2。 j现在等于1,打印list2并移动到下一个元素,j = 2再次打印并移动到NULL。尝试打印NULL指针的内容会导致程序崩溃
答案 1 :(得分:0)
根本没有使用list2和tmp:尽管你已经为它们分配了列表。
但真正的问题是,当只有3个时,你要求列表中的4个项目。当然最后一个是NULL并导致崩溃。