1

我正在创建一个结构类型的链表队列。问题是当我排队一个对象并打印链接列表时,它显示得很好。排队另一个项目,然后打印让我乱码。我使用了 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;
    }
}

我需要做什么来解决这个问题?我知道未定义的行为可能发生在哪里,但不知道我应该做什么。

4

1 回答 1

2

这部分是一个问题:

Employee *tmp;

此时 tmp 是一个内容未定义的指针。

head->next = tmp;

现在您刚刚将未定义的内容存储到 head-> next 中。

while(tmp->next != NULL)

现在您刚刚取消引用未定义的指针。

于 2013-10-26T02:06:34.503 回答