FIFO队列头指针不正确

时间:2012-11-24 19:50:57

标签: c pointers data-structures queue fifo

我需要在C中为一个家庭作业项目的一小部分实现一个队列。我用各种语言已经这样做了几年,所以我很惊讶我遇到了这么多麻烦。我的问题是Head的价值不断变化为最近的增值。

到目前为止,这是我的代码:

void Enqueue( fifo* queue, int customerData)
{
//Determine if a head or tail exists
int tailExists = 0;

if(queue->tail->customerId >= 0){
    tailExists = 1;
}

//Create new elements

struct fifo_element a, *element;
element = &a;

if(tailExists == 1)
    printf("test2 the head is %d\t", queue->head->customerId);

element->customerId = customerData;

if(tailExists == 1)
    printf("test3 the head is %d\t", queue->head->customerId);

//Set the next element to the current tail
if(tailExists == 1)
    element->next = queue->tail;
else
    element->next = NULL;

//Set the prev element to null
element->prev = NULL;

//Set the last element's previous to the new element
if(tailExists == 1){
    queue->tail->prev = element;
}

//Set the tail to the new element
queue->tail = element;
if(tailExists == 0){
    queue->head = element;
}

printf("the head is %d\t", queue->head->customerId);
printf("the tail is %d\t", queue->tail->customerId);

}

基于printf行,行element->customerId = customerData;导致Head值发生变化。但是,我不知道这是怎么可能的......为什么会发生这种情况?

(我的测试程序只运行一个for循环,从0-> 4,调用enqueue,其customerData值为i)。

1 个答案:

答案 0 :(得分:0)

element = &a; 

您正在向队列中的局部变量插入指针,在函数返回后,局部变量不再存在,并且队列包含悬空指针。

malloc()记忆:

struct fifo_element *element = malloc(sizeof *element);