1

宿題プロジェクトのごく一部のために、C でキューを実装する必要があります。私はこれを数年間さまざまな言語で行ってきたので、こんなに苦労していることに驚いています. 私の問題は、ヘッドの値が最新の付加価値に継続的に変更されていることです。

これまでの私のコードは次のとおりです。

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 値が変更されています。しかし、これがどのように可能であるかはわかりません...なぜこれが起こっているのですか?

(私のテスト プログラムは、0->4 の for ループを実行し、enqueue を customerData 値 i で呼び出します)。

4

1 に答える 1

0
element = &a; 

キューにローカル変数へのポインターを挿入しています。関数が戻った後、ローカル変数はもう存在せず、キューにはダングリング ポインターが含まれています。

malloc()想い出:

struct fifo_element *element = malloc(sizeof *element);
于 2013-03-27T19:10:41.007 に答える