我正在创建一个struct类型的Linked List Queue。问题是,当我enQueue一个对象并打印链接列表时,它显示正常。排队另一个项目然后打印给我带来麻烦。我使用GDB并发现变量变得很乱,我预计这是由于未定义的行为,但我无法弄清楚我需要做些什么来解决这个问题。
这是变量由用户定义的地方
printf("First name of employee?\n");
char firstName[MAX_LENGTH];
scanf(" %s", &firstName);
printf("Last name?\n");
char lastName[MAX_LENGTH];
scanf(" %s", &lastName);
if(head->next == NULL) //if there is currently no employee in the list
head->next = hireEmployee(head, lastName, firstName, employeeCount);
else
{
Employee *tmp;
head->next = tmp;
while(tmp->next != NULL)
{
tmp = tmp->next;
}
hireEmployee(tmp, lastName, firstName, employeeCount);
}
这是enQueue操作的一部分。
Employee *new = malloc(sizeof(Employee));
strcpy(new->lastName, lastName);
strcpy(new->firstName, firstName);
最后这是我的打印方法。
Employee *tmp;
tmp = head->next;
if(head->next == NULL)
printf("Nothing in this list.");
else
{
printf("%s, %s\nEmployee Number: %i\n", tmp->lastName, tmp->firstName, tmp->employeeNumber);
while(tmp->next != NULL)
{
printf("%s, %s\nEmployee Number: %i\n", tmp->lastName, tmp->firstName, tmp->employeeNumber);
tmp = tmp->next;
}
}
我需要做些什么来解决这个问题?我知道未定义的行为可能在哪里发生,但不知道我应该做什么。
答案 0 :(得分:2)
这部分是一个问题:
Employee *tmp;
此时tmp是一个内容未定义的指针。
head->next = tmp;
现在你只是将未定义的内容存储到head->下。
while(tmp->next != NULL)
现在你刚刚取消引用未定义的指针。